1use crate::file::{ReadFile, WriteFile};
18use capsec_core::cap::Cap;
19use capsec_core::error::CapSecError;
20use capsec_core::has::Has;
21use capsec_core::permission::{FsRead, FsWrite};
22use std::path::Path;
23
24pub fn read(path: impl AsRef<Path>, cap: &impl Has<FsRead>) -> Result<Vec<u8>, CapSecError> {
27 let _proof: Cap<FsRead> = cap.cap_ref();
28 Ok(std::fs::read(path)?)
29}
30
31pub fn read_to_string(
34 path: impl AsRef<Path>,
35 cap: &impl Has<FsRead>,
36) -> Result<String, CapSecError> {
37 let _proof: Cap<FsRead> = cap.cap_ref();
38 Ok(std::fs::read_to_string(path)?)
39}
40
41pub fn read_dir(
44 path: impl AsRef<Path>,
45 cap: &impl Has<FsRead>,
46) -> Result<std::fs::ReadDir, CapSecError> {
47 let _proof: Cap<FsRead> = cap.cap_ref();
48 Ok(std::fs::read_dir(path)?)
49}
50
51pub fn metadata(
54 path: impl AsRef<Path>,
55 cap: &impl Has<FsRead>,
56) -> Result<std::fs::Metadata, CapSecError> {
57 let _proof: Cap<FsRead> = cap.cap_ref();
58 Ok(std::fs::metadata(path)?)
59}
60
61pub fn write(
64 path: impl AsRef<Path>,
65 contents: impl AsRef<[u8]>,
66 cap: &impl Has<FsWrite>,
67) -> Result<(), CapSecError> {
68 let _proof: Cap<FsWrite> = cap.cap_ref();
69 Ok(std::fs::write(path, contents)?)
70}
71
72pub fn create_dir_all(path: impl AsRef<Path>, cap: &impl Has<FsWrite>) -> Result<(), CapSecError> {
75 let _proof: Cap<FsWrite> = cap.cap_ref();
76 Ok(std::fs::create_dir_all(path)?)
77}
78
79pub fn remove_file(path: impl AsRef<Path>, cap: &impl Has<FsWrite>) -> Result<(), CapSecError> {
82 let _proof: Cap<FsWrite> = cap.cap_ref();
83 Ok(std::fs::remove_file(path)?)
84}
85
86pub fn remove_dir_all(path: impl AsRef<Path>, cap: &impl Has<FsWrite>) -> Result<(), CapSecError> {
89 let _proof: Cap<FsWrite> = cap.cap_ref();
90 Ok(std::fs::remove_dir_all(path)?)
91}
92
93pub fn rename(
96 from: impl AsRef<Path>,
97 to: impl AsRef<Path>,
98 cap: &impl Has<FsWrite>,
99) -> Result<(), CapSecError> {
100 let _proof: Cap<FsWrite> = cap.cap_ref();
101 Ok(std::fs::rename(from, to)?)
102}
103
104pub fn copy(
107 from: impl AsRef<Path>,
108 to: impl AsRef<Path>,
109 read_cap: &impl Has<FsRead>,
110 write_cap: &impl Has<FsWrite>,
111) -> Result<u64, CapSecError> {
112 let _read_proof: Cap<FsRead> = read_cap.cap_ref();
113 let _write_proof: Cap<FsWrite> = write_cap.cap_ref();
114 Ok(std::fs::copy(from, to)?)
115}
116
117pub fn open(path: impl AsRef<Path>, cap: &impl Has<FsRead>) -> Result<ReadFile, CapSecError> {
121 let _proof: Cap<FsRead> = cap.cap_ref();
122 Ok(ReadFile::new(std::fs::File::open(path)?))
123}
124
125pub fn create(path: impl AsRef<Path>, cap: &impl Has<FsWrite>) -> Result<WriteFile, CapSecError> {
129 let _proof: Cap<FsWrite> = cap.cap_ref();
130 Ok(WriteFile::new(std::fs::File::create(path)?))
131}