intuicio_frontend_simpleton/library/
fs.rs1use crate::{library::bytes::Bytes, Array, Reference, Text};
2use intuicio_core::registry::Registry;
3use intuicio_derive::intuicio_function;
4use std::path::{Path, PathBuf};
5
6#[intuicio_function(module_name = "fs", use_registry)]
7pub fn exists(registry: &Registry, path: Reference) -> Reference {
8 Reference::new_boolean(
9 Path::new(path.read::<Text>().unwrap().as_str()).exists(),
10 registry,
11 )
12}
13
14#[intuicio_function(module_name = "fs", use_registry)]
15pub fn is_file(registry: &Registry, path: Reference) -> Reference {
16 Reference::new_boolean(
17 Path::new(path.read::<Text>().unwrap().as_str()).is_file(),
18 registry,
19 )
20}
21
22#[intuicio_function(module_name = "fs", use_registry)]
23pub fn is_dir(registry: &Registry, path: Reference) -> Reference {
24 Reference::new_boolean(
25 Path::new(path.read::<Text>().unwrap().as_str()).is_dir(),
26 registry,
27 )
28}
29
30#[intuicio_function(module_name = "fs", use_registry)]
31pub fn make_dir(registry: &Registry, path: Reference) -> Reference {
32 Reference::new_boolean(
33 std::fs::create_dir_all(path.read::<Text>().unwrap().as_str()).is_ok(),
34 registry,
35 )
36}
37
38#[intuicio_function(module_name = "fs", use_registry)]
39pub fn scan_dir(registry: &Registry, path: Reference) -> Reference {
40 let result = std::fs::read_dir(path.read::<Text>().unwrap().as_str())
41 .unwrap()
42 .map(|entry| {
43 Reference::new_text(
44 entry.unwrap().path().to_string_lossy().as_ref().to_owned(),
45 registry,
46 )
47 })
48 .collect::<Array>();
49 Reference::new_array(result, registry)
50}
51
52#[intuicio_function(module_name = "fs", use_registry)]
53pub fn read_file(registry: &Registry, path: Reference) -> Reference {
54 Reference::new(
55 Bytes::new_raw(std::fs::read(path.read::<Text>().unwrap().as_str()).unwrap()),
56 registry,
57 )
58}
59
60#[intuicio_function(module_name = "fs", use_registry)]
61pub fn write_file(registry: &Registry, path: Reference, bytes: Reference) -> Reference {
62 Reference::new_boolean(
63 std::fs::write(
64 path.read::<Text>().unwrap().as_str(),
65 bytes.read::<Bytes>().unwrap().get_ref(),
66 )
67 .is_ok(),
68 registry,
69 )
70}
71
72#[intuicio_function(module_name = "fs", use_registry)]
73pub fn delete(registry: &Registry, path: Reference) -> Reference {
74 let path = PathBuf::from(path.read::<Text>().unwrap().as_str());
75 if path.is_file() {
76 Reference::new_boolean(std::fs::remove_file(path).is_ok(), registry)
77 } else if path.is_dir() {
78 Reference::new_boolean(std::fs::remove_dir_all(path).is_ok(), registry)
79 } else {
80 Reference::new_boolean(false, registry)
81 }
82}
83
84#[intuicio_function(module_name = "fs", use_registry)]
85pub fn get_current_dir(registry: &Registry) -> Reference {
86 Reference::new_text(
87 std::env::current_dir()
88 .unwrap()
89 .to_string_lossy()
90 .to_string(),
91 registry,
92 )
93}
94
95#[intuicio_function(module_name = "fs", use_registry)]
96pub fn set_current_dir(registry: &Registry, path: Reference) -> Reference {
97 Reference::new_boolean(
98 std::env::set_current_dir(path.read::<Text>().unwrap().as_str()).is_ok(),
99 registry,
100 )
101}
102
103pub fn install(registry: &mut Registry) {
104 registry.add_function(exists::define_function(registry));
105 registry.add_function(is_file::define_function(registry));
106 registry.add_function(is_dir::define_function(registry));
107 registry.add_function(make_dir::define_function(registry));
108 registry.add_function(scan_dir::define_function(registry));
109 registry.add_function(read_file::define_function(registry));
110 registry.add_function(write_file::define_function(registry));
111 registry.add_function(delete::define_function(registry));
112 registry.add_function(get_current_dir::define_function(registry));
113 registry.add_function(set_current_dir::define_function(registry));
114}