1 | // SPDX-License-Identifier: GPL-2.0 |
2 | |
3 | //! Rust printing macros sample. |
4 | |
5 | use kernel::pr_cont; |
6 | use kernel::prelude::*; |
7 | |
8 | module! { |
9 | type: RustPrint, |
10 | name: "rust_print" , |
11 | author: "Rust for Linux Contributors" , |
12 | description: "Rust printing macros sample" , |
13 | license: "GPL" , |
14 | } |
15 | |
16 | struct RustPrint; |
17 | |
18 | fn arc_print() -> Result { |
19 | use kernel::sync::*; |
20 | |
21 | let a = Arc::try_new(1)?; |
22 | let b = UniqueArc::try_new("hello, world" )?; |
23 | |
24 | // Prints the value of data in `a`. |
25 | pr_info!("{}" , a); |
26 | |
27 | // Uses ":?" to print debug fmt of `b`. |
28 | pr_info!("{:?}" , b); |
29 | |
30 | let a: Arc<&str> = b.into(); |
31 | let c = a.clone(); |
32 | |
33 | // Uses `dbg` to print, will move `c` (for temporary debugging purposes). |
34 | dbg!(c); |
35 | |
36 | // Pretty-prints the debug formatting with lower-case hexadecimal integers. |
37 | pr_info!("{:#x?}" , a); |
38 | |
39 | Ok(()) |
40 | } |
41 | |
42 | impl kernel::Module for RustPrint { |
43 | fn init(_module: &'static ThisModule) -> Result<Self> { |
44 | pr_info!("Rust printing macros sample (init)\n" ); |
45 | |
46 | pr_emerg!("Emergency message (level 0) without args\n" ); |
47 | pr_alert!("Alert message (level 1) without args\n" ); |
48 | pr_crit!("Critical message (level 2) without args\n" ); |
49 | pr_err!("Error message (level 3) without args\n" ); |
50 | pr_warn!("Warning message (level 4) without args\n" ); |
51 | pr_notice!("Notice message (level 5) without args\n" ); |
52 | pr_info!("Info message (level 6) without args\n" ); |
53 | |
54 | pr_info!("A line that" ); |
55 | pr_cont!(" is continued" ); |
56 | pr_cont!(" without args\n" ); |
57 | |
58 | pr_emerg!("{} message (level {}) with args\n" , "Emergency" , 0); |
59 | pr_alert!("{} message (level {}) with args\n" , "Alert" , 1); |
60 | pr_crit!("{} message (level {}) with args\n" , "Critical" , 2); |
61 | pr_err!("{} message (level {}) with args\n" , "Error" , 3); |
62 | pr_warn!("{} message (level {}) with args\n" , "Warning" , 4); |
63 | pr_notice!("{} message (level {}) with args\n" , "Notice" , 5); |
64 | pr_info!("{} message (level {}) with args\n" , "Info" , 6); |
65 | |
66 | pr_info!("A {} that" , "line" ); |
67 | pr_cont!(" is {}" , "continued" ); |
68 | pr_cont!(" with {}\n" , "args" ); |
69 | |
70 | arc_print()?; |
71 | |
72 | Ok(RustPrint) |
73 | } |
74 | } |
75 | |
76 | impl Drop for RustPrint { |
77 | fn drop(&mut self) { |
78 | pr_info!("Rust printing macros sample (exit)\n" ); |
79 | } |
80 | } |
81 | |