1use crate::file::{ReadFile, WriteFile};
18use capsec_core::cap::Cap;
19use capsec_core::cap_provider::CapProvider;
20use capsec_core::error::CapSecError;
21use capsec_core::permission::{FsRead, FsWrite};
22use std::path::Path;
23
24pub fn read(
27 path: impl AsRef<Path>,
28 cap: &impl CapProvider<FsRead>,
29) -> Result<Vec<u8>, CapSecError> {
30 let _proof: Cap<FsRead> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
31 Ok(std::fs::read(path)?)
32}
33
34pub fn read_to_string(
37 path: impl AsRef<Path>,
38 cap: &impl CapProvider<FsRead>,
39) -> Result<String, CapSecError> {
40 let _proof: Cap<FsRead> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
41 Ok(std::fs::read_to_string(path)?)
42}
43
44pub fn read_dir(
47 path: impl AsRef<Path>,
48 cap: &impl CapProvider<FsRead>,
49) -> Result<std::fs::ReadDir, CapSecError> {
50 let _proof: Cap<FsRead> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
51 Ok(std::fs::read_dir(path)?)
52}
53
54pub fn metadata(
57 path: impl AsRef<Path>,
58 cap: &impl CapProvider<FsRead>,
59) -> Result<std::fs::Metadata, CapSecError> {
60 let _proof: Cap<FsRead> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
61 Ok(std::fs::metadata(path)?)
62}
63
64pub fn write(
67 path: impl AsRef<Path>,
68 contents: impl AsRef<[u8]>,
69 cap: &impl CapProvider<FsWrite>,
70) -> Result<(), CapSecError> {
71 let _proof: Cap<FsWrite> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
72 Ok(std::fs::write(path, contents)?)
73}
74
75pub fn create_dir_all(
78 path: impl AsRef<Path>,
79 cap: &impl CapProvider<FsWrite>,
80) -> Result<(), CapSecError> {
81 let _proof: Cap<FsWrite> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
82 Ok(std::fs::create_dir_all(path)?)
83}
84
85pub fn remove_file(
88 path: impl AsRef<Path>,
89 cap: &impl CapProvider<FsWrite>,
90) -> Result<(), CapSecError> {
91 let _proof: Cap<FsWrite> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
92 Ok(std::fs::remove_file(path)?)
93}
94
95pub fn remove_dir_all(
98 path: impl AsRef<Path>,
99 cap: &impl CapProvider<FsWrite>,
100) -> Result<(), CapSecError> {
101 let _proof: Cap<FsWrite> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
102 Ok(std::fs::remove_dir_all(path)?)
103}
104
105pub fn rename(
110 from: impl AsRef<Path>,
111 to: impl AsRef<Path>,
112 cap: &impl CapProvider<FsWrite>,
113) -> Result<(), CapSecError> {
114 let _proof: Cap<FsWrite> = cap.provide_cap(&from.as_ref().to_string_lossy())?;
115 let _proof2: Cap<FsWrite> = cap.provide_cap(&to.as_ref().to_string_lossy())?;
116 Ok(std::fs::rename(from, to)?)
117}
118
119pub fn copy(
125 from: impl AsRef<Path>,
126 to: impl AsRef<Path>,
127 read_cap: &impl CapProvider<FsRead>,
128 write_cap: &impl CapProvider<FsWrite>,
129) -> Result<u64, CapSecError> {
130 let _read_proof: Cap<FsRead> = read_cap.provide_cap(&from.as_ref().to_string_lossy())?;
131 let _write_proof: Cap<FsWrite> = write_cap.provide_cap(&to.as_ref().to_string_lossy())?;
132 Ok(std::fs::copy(from, to)?)
133}
134
135pub fn open(
139 path: impl AsRef<Path>,
140 cap: &impl CapProvider<FsRead>,
141) -> Result<ReadFile, CapSecError> {
142 let _proof: Cap<FsRead> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
143 Ok(ReadFile::new(std::fs::File::open(path)?))
144}
145
146pub fn create(
150 path: impl AsRef<Path>,
151 cap: &impl CapProvider<FsWrite>,
152) -> Result<WriteFile, CapSecError> {
153 let _proof: Cap<FsWrite> = cap.provide_cap(&path.as_ref().to_string_lossy())?;
154 Ok(WriteFile::new(std::fs::File::create(path)?))
155}