xnode_manager_sdk/file/
handlers.rs

1use crate::{
2    file::models::{
3        CreateDirectory, Directory, File, ReadDirectory, ReadFile, RemoveDirectory, RemoveFile,
4        WriteFile,
5    },
6    utils::{
7        Empty, SessionGetInput, SessionGetOutput, SessionPostInput, SessionPostOutput, session_get,
8        session_post,
9    },
10};
11
12pub fn scope() -> String {
13    "/file".to_string()
14}
15
16#[derive(Debug, Clone, PartialEq)]
17pub struct ReadFilePath {
18    pub scope: String,
19}
20pub type ReadFileInput<'a> = SessionGetInput<'a, ReadFilePath, ReadFile>;
21pub type ReadFileOutput = File;
22pub async fn read_file(input: ReadFileInput<'_>) -> SessionGetOutput<ReadFileOutput> {
23    session_get(input, scope(), |path| {
24        format!("/{scope}/read_file", scope = path.scope)
25    })
26    .await
27}
28
29#[derive(Debug, Clone, PartialEq)]
30pub struct WriteFilePath {
31    pub scope: String,
32}
33pub type WriteFileInput<'a> = SessionPostInput<'a, WriteFilePath, WriteFile>;
34pub type WriteFileOutput = Empty;
35pub async fn write_file(input: WriteFileInput<'_>) -> SessionPostOutput<WriteFileOutput> {
36    session_post(input, scope(), |path| {
37        format!("/{scope}/write_file", scope = path.scope)
38    })
39    .await
40}
41
42#[derive(Debug, Clone, PartialEq)]
43pub struct RemoveFilePath {
44    pub scope: String,
45}
46pub type RemoveFileInput<'a> = SessionPostInput<'a, RemoveFilePath, RemoveFile>;
47pub type RemoveFileOutput = Empty;
48pub async fn remove_file(input: RemoveFileInput<'_>) -> SessionPostOutput<RemoveFileOutput> {
49    session_post(input, scope(), |path| {
50        format!("/{scope}/remove_file", scope = path.scope)
51    })
52    .await
53}
54
55#[derive(Debug, Clone, PartialEq)]
56pub struct ReadDirectoryPath {
57    pub scope: String,
58}
59pub type ReadDirectoryInput<'a> = SessionGetInput<'a, ReadDirectoryPath, ReadDirectory>;
60pub type ReadDirectoryOutput = Directory;
61pub async fn read_directory(
62    input: ReadDirectoryInput<'_>,
63) -> SessionGetOutput<ReadDirectoryOutput> {
64    session_get(input, scope(), |path| {
65        format!("/{scope}/read_directory", scope = path.scope)
66    })
67    .await
68}
69
70#[derive(Debug, Clone, PartialEq)]
71pub struct CreateDirectoryPath {
72    pub scope: String,
73}
74pub type CreateDirectoryInput<'a> = SessionPostInput<'a, CreateDirectoryPath, CreateDirectory>;
75pub type CreateDirectoryOutput = Empty;
76pub async fn create_directory(
77    input: CreateDirectoryInput<'_>,
78) -> SessionPostOutput<CreateDirectoryOutput> {
79    session_post(input, scope(), |path| {
80        format!("/{scope}/create_directory", scope = path.scope)
81    })
82    .await
83}
84
85#[derive(Debug, Clone, PartialEq)]
86pub struct RemoveDirectoryPath {
87    pub scope: String,
88}
89pub type RemoveDirectoryInput<'a> = SessionPostInput<'a, RemoveDirectoryPath, RemoveDirectory>;
90pub type RemoveDirectoryOutput = Empty;
91pub async fn remove_directory(
92    input: RemoveDirectoryInput<'_>,
93) -> SessionPostOutput<RemoveDirectoryOutput> {
94    session_post(input, scope(), |path| {
95        format!("/{scope}/remove_directory", scope = path.scope)
96    })
97    .await
98}