162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci//! Rust minimal sample.
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciuse kernel::prelude::*;
662306a36Sopenharmony_ci
762306a36Sopenharmony_cimodule! {
862306a36Sopenharmony_ci    type: RustMinimal,
962306a36Sopenharmony_ci    name: "rust_minimal",
1062306a36Sopenharmony_ci    author: "Rust for Linux Contributors",
1162306a36Sopenharmony_ci    description: "Rust minimal sample",
1262306a36Sopenharmony_ci    license: "GPL",
1362306a36Sopenharmony_ci}
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistruct RustMinimal {
1662306a36Sopenharmony_ci    numbers: Vec<i32>,
1762306a36Sopenharmony_ci}
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciimpl kernel::Module for RustMinimal {
2062306a36Sopenharmony_ci    fn init(_module: &'static ThisModule) -> Result<Self> {
2162306a36Sopenharmony_ci        pr_info!("Rust minimal sample (init)\n");
2262306a36Sopenharmony_ci        pr_info!("Am I built-in? {}\n", !cfg!(MODULE));
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci        let mut numbers = Vec::new();
2562306a36Sopenharmony_ci        numbers.try_push(72)?;
2662306a36Sopenharmony_ci        numbers.try_push(108)?;
2762306a36Sopenharmony_ci        numbers.try_push(200)?;
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci        Ok(RustMinimal { numbers })
3062306a36Sopenharmony_ci    }
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciimpl Drop for RustMinimal {
3462306a36Sopenharmony_ci    fn drop(&mut self) {
3562306a36Sopenharmony_ci        pr_info!("My numbers are {:?}\n", self.numbers);
3662306a36Sopenharmony_ci        pr_info!("Rust minimal sample (exit)\n");
3762306a36Sopenharmony_ci    }
3862306a36Sopenharmony_ci}
39