virtual_file_system/
item.rs

1use core::fmt::Debug;
2
3use exported_file_system::{
4    AttributeOperations, BaseOperations, BlockDevice, CharacterDevice, FileSystemOperations,
5    MountOperations,
6};
7
8use crate::pipe::Pipe;
9
10#[derive(Clone)]
11pub enum ItemStatic {
12    FileSystem(&'static dyn FileSystemOperations),
13    File(&'static dyn FileSystemOperations),
14    Directory(&'static dyn FileSystemOperations),
15    BlockDevice(&'static dyn BlockDevice),
16    CharacterDevice(&'static dyn CharacterDevice),
17    Pipe(&'static Pipe),
18}
19
20impl Debug for ItemStatic {
21    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
22        match self {
23            ItemStatic::FileSystem(_) => write!(f, "ItemStatic::FileSystem"),
24            ItemStatic::File(_) => write!(f, "ItemStatic::File"),
25            ItemStatic::Directory(_) => write!(f, "ItemStatic::Directory"),
26            ItemStatic::BlockDevice(_) => write!(f, "ItemStatic::BlockDevice"),
27            ItemStatic::CharacterDevice(_) => write!(f, "ItemStatic::CharacterDevice"),
28            ItemStatic::Pipe(_) => write!(f, "ItemStatic::Pipe"),
29        }
30    }
31}
32
33impl ItemStatic {
34    pub(crate) fn as_base_operations(&self) -> Option<&dyn BaseOperations> {
35        match self {
36            ItemStatic::File(file_system) => Some(*file_system),
37            ItemStatic::BlockDevice(device) => Some(*device),
38            ItemStatic::CharacterDevice(device) => Some(*device),
39            ItemStatic::Pipe(pipe) => Some(*pipe),
40            _ => None,
41        }
42    }
43
44    pub(crate) fn as_attributes_operations(&self) -> Option<&dyn AttributeOperations> {
45        match self {
46            ItemStatic::File(fs) => Some(*fs),
47            ItemStatic::Directory(fs) => Some(*fs),
48            _ => None,
49        }
50    }
51
52    pub(crate) fn as_mount_operations(&self) -> Option<&dyn MountOperations> {
53        match self {
54            ItemStatic::FileSystem(fs) => Some(*fs),
55            ItemStatic::BlockDevice(device) => Some(*device),
56            ItemStatic::CharacterDevice(device) => Some(*device),
57            ItemStatic::Pipe(pipe) => Some(*pipe),
58            _ => None,
59        }
60    }
61
62    pub(crate) fn as_directory_operations(&self) -> Option<&dyn file_system::DirectoryOperations> {
63        match self {
64            ItemStatic::Directory(fs) => Some(*fs),
65            _ => None,
66        }
67    }
68}