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