virtual_file_system/
item.rs1use 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}