ayaka_bindings_types/
fs.rs

1use std::io::SeekFrom;
2
3use serde::{Deserialize, Serialize};
4use vfs::*;
5
6/// Type of a file.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
8pub enum FileType {
9    /// A file.
10    File,
11    /// A directory.
12    Dir,
13}
14
15impl From<VfsFileType> for FileType {
16    fn from(value: VfsFileType) -> Self {
17        match value {
18            VfsFileType::File => Self::File,
19            VfsFileType::Directory => Self::Dir,
20        }
21    }
22}
23
24impl From<FileType> for VfsFileType {
25    fn from(value: FileType) -> Self {
26        match value {
27            FileType::File => Self::File,
28            FileType::Dir => Self::Directory,
29        }
30    }
31}
32
33/// File metadata.
34#[derive(Debug, Deserialize, Serialize)]
35pub struct FileMetadata {
36    /// Type of file.
37    pub file_type: FileType,
38    /// Length of the file.
39    pub len: u64,
40}
41
42impl From<VfsMetadata> for FileMetadata {
43    fn from(value: VfsMetadata) -> Self {
44        Self {
45            file_type: value.file_type.into(),
46            len: value.len,
47        }
48    }
49}
50
51impl From<FileMetadata> for VfsMetadata {
52    fn from(value: FileMetadata) -> Self {
53        Self {
54            file_type: value.file_type.into(),
55            len: value.len,
56        }
57    }
58}
59
60/// A [`SeekFrom`] type which implements `serde`.
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
62pub enum FileSeekFrom {
63    /// Seek from start.
64    Start(u64),
65    /// Seek from end.
66    End(i64),
67    /// Seek from current position.
68    Current(i64),
69}
70
71impl From<SeekFrom> for FileSeekFrom {
72    fn from(value: SeekFrom) -> Self {
73        match value {
74            SeekFrom::Start(p) => Self::Start(p),
75            SeekFrom::End(p) => Self::End(p),
76            SeekFrom::Current(p) => Self::Current(p),
77        }
78    }
79}
80
81impl From<FileSeekFrom> for SeekFrom {
82    fn from(value: FileSeekFrom) -> Self {
83        match value {
84            FileSeekFrom::Start(p) => Self::Start(p),
85            FileSeekFrom::End(p) => Self::End(p),
86            FileSeekFrom::Current(p) => Self::Current(p),
87        }
88    }
89}