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});