components/appid/
checker.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2024.
4
5//! Component for creating a process checking machine.
6
7use core::mem::MaybeUninit;
8use kernel::component::Component;
9
10#[macro_export]
11macro_rules! process_checker_machine_component_static {
12    () => {{
13        kernel::static_buf!(kernel::process::ProcessCheckerMachine)
14    };};
15}
16
17pub type ProcessCheckerMachineComponentType = kernel::process::ProcessCheckerMachine;
18
19pub struct ProcessCheckerMachineComponent {
20    policy: &'static dyn kernel::process_checker::AppCredentialsPolicy<'static>,
21}
22
23impl ProcessCheckerMachineComponent {
24    pub fn new(policy: &'static dyn kernel::process_checker::AppCredentialsPolicy) -> Self {
25        Self { policy }
26    }
27}
28
29impl Component for ProcessCheckerMachineComponent {
30    type StaticInput = &'static mut MaybeUninit<kernel::process::ProcessCheckerMachine>;
31
32    type Output = &'static kernel::process::ProcessCheckerMachine;
33
34    fn finalize(self, s: Self::StaticInput) -> Self::Output {
35        let checker = s.write(kernel::process::ProcessCheckerMachine::new(self.policy));
36
37        self.policy.set_client(checker);
38        checker
39    }
40}