xref: /openbmc/linux/samples/rust/rust_minimal.rs (revision e4fc6580)
1*e4fc6580SMiguel Ojeda // SPDX-License-Identifier: GPL-2.0
2*e4fc6580SMiguel Ojeda 
3*e4fc6580SMiguel Ojeda //! Rust minimal sample.
4*e4fc6580SMiguel Ojeda 
5*e4fc6580SMiguel Ojeda use kernel::prelude::*;
6*e4fc6580SMiguel Ojeda 
7*e4fc6580SMiguel Ojeda module! {
8*e4fc6580SMiguel Ojeda     type: RustMinimal,
9*e4fc6580SMiguel Ojeda     name: b"rust_minimal",
10*e4fc6580SMiguel Ojeda     author: b"Rust for Linux Contributors",
11*e4fc6580SMiguel Ojeda     description: b"Rust minimal sample",
12*e4fc6580SMiguel Ojeda     license: b"GPL",
13*e4fc6580SMiguel Ojeda }
14*e4fc6580SMiguel Ojeda 
15*e4fc6580SMiguel Ojeda struct RustMinimal {
16*e4fc6580SMiguel Ojeda     numbers: Vec<i32>,
17*e4fc6580SMiguel Ojeda }
18*e4fc6580SMiguel Ojeda 
19*e4fc6580SMiguel Ojeda impl kernel::Module for RustMinimal {
20*e4fc6580SMiguel Ojeda     fn init(_module: &'static ThisModule) -> Result<Self> {
21*e4fc6580SMiguel Ojeda         pr_info!("Rust minimal sample (init)\n");
22*e4fc6580SMiguel Ojeda         pr_info!("Am I built-in? {}\n", !cfg!(MODULE));
23*e4fc6580SMiguel Ojeda 
24*e4fc6580SMiguel Ojeda         let mut numbers = Vec::new();
25*e4fc6580SMiguel Ojeda         numbers.try_push(72)?;
26*e4fc6580SMiguel Ojeda         numbers.try_push(108)?;
27*e4fc6580SMiguel Ojeda         numbers.try_push(200)?;
28*e4fc6580SMiguel Ojeda 
29*e4fc6580SMiguel Ojeda         Ok(RustMinimal { numbers })
30*e4fc6580SMiguel Ojeda     }
31*e4fc6580SMiguel Ojeda }
32*e4fc6580SMiguel Ojeda 
33*e4fc6580SMiguel Ojeda impl Drop for RustMinimal {
34*e4fc6580SMiguel Ojeda     fn drop(&mut self) {
35*e4fc6580SMiguel Ojeda         pr_info!("My numbers are {:?}\n", self.numbers);
36*e4fc6580SMiguel Ojeda         pr_info!("Rust minimal sample (exit)\n");
37*e4fc6580SMiguel Ojeda     }
38*e4fc6580SMiguel Ojeda }
39