fluentci_shared/
file.rs

1use extism::{convert::Json, *};
2use fluentci_common::file::{self, file as common_file};
3use fluentci_types::{directory::Directory, file::Chmod};
4
5use crate::state::State;
6
7host_fn!(pub file(user_data: State; path: String) -> Json<File> {
8    let state = user_data.get()?;
9    let state = state.lock().unwrap();
10    let graph = state.graph.clone();
11    let file = common_file(graph, path, true)?;
12    Ok(Json(file))
13});
14
15host_fn!(pub unzip(user_data: State; path: String) -> Json<Directory> {
16    let state = user_data.get()?;
17    let state = state.lock().unwrap();
18    let graph = state.graph.clone();
19    match file::unzip(graph, path, None) {
20        Ok(directory) => Ok(Json(Directory::from(directory))),
21        Err(e) => Err(e),
22    }
23});
24
25host_fn!(pub tar_xzvf(user_data: State; path: String) -> Json<Directory> {
26    let state = user_data.get()?;
27    let state = state.lock().unwrap();
28    let graph = state.graph.clone();
29
30    match file::tar_xzvf(graph, path, None) {
31        Ok(directory) => Ok(Json(Directory::from(directory))),
32        Err(e) => Err(e),
33    }
34});
35
36host_fn!(pub md5(user_data: State; path: String) -> String {
37    let state = user_data.get()?;
38    let state = state.lock().unwrap();
39    let graph = state.graph.clone();
40    file::md5(graph, path)
41});
42
43host_fn!(pub sha256(user_data: State; path: String) -> String {
44    let state = user_data.get()?;
45    let state = state.lock().unwrap();
46    let graph = state.graph.clone();
47    file::sha256(graph, path)
48});
49
50host_fn!(pub chmod(user_data: State; options: Json<Chmod>) -> Result<Json<File>, Error> {
51    let state = user_data.get()?;
52    let state = state.lock().unwrap();
53    let graph = state.graph.clone();
54
55    let options = options.into_inner();
56    let path = options.path.clone();
57    let mode = options.mode.clone();
58    let file = file::chmod(graph, path, mode)?;
59
60    Ok(Json(file))
61});