ctru/services/
fs.rs

1//! FileSystem service.
2//!
3//! Currently, this module contains only datatypes to easily operate with unsafe [`ctru_sys`] code regarding the file-system functionality.
4#![doc(alias = "filesystem")]
5
6use bitflags::bitflags;
7
8bitflags! {
9    #[derive(Default, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)]
10    struct Open: u8 {
11        const FS_OPEN_READ   = ctru_sys::FS_OPEN_READ;
12        const FS_OPEN_WRITE  = ctru_sys::FS_OPEN_WRITE;
13        const FS_OPEN_CREATE = ctru_sys::FS_OPEN_CREATE;
14    }
15
16    #[derive(Default, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)]
17    struct Write: u16 {
18        const FS_WRITE_FLUSH       = ctru_sys::FS_WRITE_FLUSH;
19        const FS_WRITE_UPDATE_TIME = ctru_sys::FS_WRITE_UPDATE_TIME;
20    }
21
22    #[derive(Default, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Clone, Copy)]
23    struct Attribute: u32 {
24        const FS_ATTRIBUTE_DIRECTORY = ctru_sys::FS_ATTRIBUTE_DIRECTORY;
25        const FS_ATTRIBUTE_HIDDEN    = ctru_sys::FS_ATTRIBUTE_HIDDEN;
26        const FS_ATTRIBUTE_ARCHIVE   = ctru_sys::FS_ATTRIBUTE_ARCHIVE;
27        const FS_ATTRIBUTE_READ_ONLY = ctru_sys::FS_ATTRIBUTE_READ_ONLY;
28    }
29}
30
31/// Media type used for storage.
32#[doc(alias = "FS_MediaType")]
33#[derive(Copy, Clone, Debug, PartialEq, Eq)]
34#[repr(u8)]
35pub enum MediaType {
36    /// Internal NAND memory.
37    Nand = ctru_sys::MEDIATYPE_NAND,
38    /// External SD card.
39    Sd = ctru_sys::MEDIATYPE_SD,
40    /// Game Cartridge.
41    GameCard = ctru_sys::MEDIATYPE_GAME_CARD,
42}
43
44/// Kind of file path.
45#[doc(alias = "FS_PathType")]
46#[derive(Copy, Clone, Debug, PartialEq, Eq)]
47#[repr(u8)]
48pub enum PathType {
49    /// Invalid path.
50    Invalid = ctru_sys::PATH_INVALID,
51    /// Empty path.
52    Empty = ctru_sys::PATH_EMPTY,
53    /// Binary path.
54    ///
55    /// Its meaning differs depending on the Archive it is used on.
56    Binary = ctru_sys::PATH_BINARY,
57    /// ASCII path.
58    ASCII = ctru_sys::PATH_ASCII,
59    /// UTF-16 path.
60    UTF16 = ctru_sys::PATH_UTF16,
61}
62
63/// Index of the various usable data archives.
64#[doc(alias = "FS_ArchiveID")]
65#[derive(Copy, Clone, Debug, PartialEq, Eq)]
66#[repr(u32)]
67pub enum ArchiveID {
68    /// Read-Only Memory File System.
69    RomFS = ctru_sys::ARCHIVE_ROMFS,
70    /// Game save data.
71    Savedata = ctru_sys::ARCHIVE_SAVEDATA,
72    /// Game ext data.
73    Extdata = ctru_sys::ARCHIVE_EXTDATA,
74    /// Shared ext data.
75    SharedExtdata = ctru_sys::ARCHIVE_SHARED_EXTDATA,
76    /// System save data.
77    SystemSavedata = ctru_sys::ARCHIVE_SYSTEM_SAVEDATA,
78    /// SD card.
79    Sdmc = ctru_sys::ARCHIVE_SDMC,
80    /// SD card (write-only).
81    SdmcWriteOnly = ctru_sys::ARCHIVE_SDMC_WRITE_ONLY,
82    /// BOSS ext data.
83    BossExtdata = ctru_sys::ARCHIVE_BOSS_EXTDATA,
84    /// Card SPI File System.
85    CardSpiFS = ctru_sys::ARCHIVE_CARD_SPIFS,
86    /// Game ext data and BOSS data.
87    ExtDataAndBossExtdata = ctru_sys::ARCHIVE_EXTDATA_AND_BOSS_EXTDATA,
88    /// System save data.
89    SystemSaveData2 = ctru_sys::ARCHIVE_SYSTEM_SAVEDATA2,
90    /// Internal NAND (read-write).
91    NandRW = ctru_sys::ARCHIVE_NAND_RW,
92    /// Internal NAND (read-only).
93    NandRO = ctru_sys::ARCHIVE_NAND_RO,
94    /// Internal NAND (read-only write access).
95    NandROWriteAccess = ctru_sys::ARCHIVE_NAND_RO_WRITE_ACCESS,
96    /// User save data and ExeFS/RomFS.
97    SaveDataAndContent = ctru_sys::ARCHIVE_SAVEDATA_AND_CONTENT,
98    /// User save data and ExeFS/RomFS (only ExeFS for fs:LDR).
99    SaveDataAndContent2 = ctru_sys::ARCHIVE_SAVEDATA_AND_CONTENT2,
100    /// NAND CTR File System.
101    NandCtrFS = ctru_sys::ARCHIVE_NAND_CTR_FS,
102    /// TWL photo.
103    TwlPhoto = ctru_sys::ARCHIVE_TWL_PHOTO,
104    /// NAND TWL File System.
105    NandTwlFS = ctru_sys::ARCHIVE_NAND_TWL_FS,
106    /// Game card save data.
107    GameCardSavedata = ctru_sys::ARCHIVE_GAMECARD_SAVEDATA,
108    /// User save data.
109    UserSavedata = ctru_sys::ARCHIVE_USER_SAVEDATA,
110    /// Demo save data.
111    DemoSavedata = ctru_sys::ARCHIVE_DEMO_SAVEDATA,
112}
113
114from_impl!(MediaType, ctru_sys::FS_MediaType);
115from_impl!(PathType, ctru_sys::FS_PathType);
116from_impl!(ArchiveID, ctru_sys::FS_ArchiveID);