intuicio_frontend_simpleton/library/
fs.rs

1use 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}