diff options
author | Boqun Feng <boqun.feng@gmail.com> | 2023-02-07 19:52:16 +0100 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2023-04-10 05:05:43 +0200 |
commit | f431c5c581fa176f608ba3fdebb3c1051bad5774 (patch) | |
tree | 05bf3b7e7e5c343c883c4f5077cddcf3bd3a9568 /samples/rust | |
parent | rust: sync: impl {Debug,Display} for {Unique,}Arc (diff) | |
download | linux-f431c5c581fa176f608ba3fdebb3c1051bad5774.tar.xz linux-f431c5c581fa176f608ba3fdebb3c1051bad5774.zip |
samples: rust: print: Add sample code for Arc printing
This both demonstrates the usage of different print format in Rust and
serves as a selftest for the `Display` and `Debug` implementation of
`Arc` and its friends.
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Reviewed-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
Reviewed-by: Finn Behrens <fin@nyantec.com>
Reviewed-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>
Link: https://lore.kernel.org/r/20230207185216.1314638-3-boqun.feng@gmail.com
[ Applied suggestions and reworded for fixing title typos. ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'samples/rust')
-rw-r--r-- | samples/rust/rust_print.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/samples/rust/rust_print.rs b/samples/rust/rust_print.rs index 8b39d9cef6d1..67ed8ebf8e8e 100644 --- a/samples/rust/rust_print.rs +++ b/samples/rust/rust_print.rs @@ -15,6 +15,30 @@ module! { struct RustPrint; +fn arc_print() -> Result { + use kernel::sync::*; + + let a = Arc::try_new(1)?; + let b = UniqueArc::try_new("hello, world")?; + + // Prints the value of data in `a`. + pr_info!("{}", a); + + // Uses ":?" to print debug fmt of `b`. + pr_info!("{:?}", b); + + let a: Arc<&str> = b.into(); + let c = a.clone(); + + // Uses `dbg` to print, will move `c` (for temporary debugging purposes). + dbg!(c); + + // Pretty-prints the debug formatting with lower-case hexadecimal integers. + pr_info!("{:#x?}", a); + + Ok(()) +} + impl kernel::Module for RustPrint { fn init(_module: &'static ThisModule) -> Result<Self> { pr_info!("Rust printing macros sample (init)\n"); @@ -43,6 +67,8 @@ impl kernel::Module for RustPrint { pr_cont!(" is {}", "continued"); pr_cont!(" with {}\n", "args"); + arc_print()?; + Ok(RustPrint) } } |