starnix_core/task/
kernel_or_task.rs

1// Copyright 2025 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use crate::task::{CurrentTask, Kernel, Task};
6
7/// An object that can be either a Kernel or a CurrentTask.
8///
9/// This allows to retrieve the Kernel from it, and the task if it is available.
10pub trait KernelOrTask<'a>: std::fmt::Debug + Clone + Copy {
11    fn kernel(&self) -> &'a Kernel;
12    fn maybe_task(&self) -> Option<&'a CurrentTask>;
13}
14
15impl<'a> KernelOrTask<'a> for &'a Kernel {
16    fn kernel(&self) -> &'a Kernel {
17        self
18    }
19    fn maybe_task(&self) -> Option<&'a CurrentTask> {
20        None
21    }
22}
23
24impl<'a> KernelOrTask<'a> for &'a CurrentTask {
25    fn kernel(&self) -> &'a Kernel {
26        (self as &Task).kernel()
27    }
28    fn maybe_task(&self) -> Option<&'a CurrentTask> {
29        Some(self)
30    }
31}