ctoolbox/workspace/ipc/services/network/
api.rs1use anyhow::Result;
9use async_trait::async_trait;
10use serde::{Deserialize, Serialize};
11
12use crate::network::NetworkBackend;
13
14pub const SERVICE_NAME: &str = "network";
16
17pub const METHOD_FETCH: &str = "fetch";
19pub const METHOD_READ_FILE: &str = "read_file";
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct FetchRequest {
24 pub url: String,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
28pub struct ReadFileRequest {
29 pub path: String,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct BytesResponse {
35 pub bytes: Vec<u8>,
37}
38
39#[async_trait]
42pub trait NetworkService: Send + Sync + std::fmt::Debug {
43 async fn fetch(&self, req: FetchRequest) -> Result<BytesResponse>;
47
48 async fn read_file(&self, req: ReadFileRequest) -> Result<BytesResponse>;
52}
53
54#[derive(Debug, Default)]
56pub struct DefaultNetworkService {
57 backend: crate::network::DefaultNetworkBackend,
58}
59
60impl DefaultNetworkService {
61 pub fn new() -> Self {
63 Self::default()
64 }
65}
66
67#[async_trait]
68impl NetworkService for DefaultNetworkService {
69 async fn fetch(&self, req: FetchRequest) -> Result<BytesResponse> {
70 let bytes = self.backend.fetch(req.url).await?;
71 Ok(BytesResponse { bytes })
72 }
73
74 async fn read_file(&self, req: ReadFileRequest) -> Result<BytesResponse> {
75 let bytes = self.backend.read_file(req.path).await?;
76 Ok(BytesResponse { bytes })
77 }
78}
79
80#[derive(Debug, Default)]
82pub struct MockNetworkService {
83 backend: crate::network::MockNetworkBackend,
84}
85
86impl MockNetworkService {
87 pub fn new() -> Self {
89 Self::default()
90 }
91}
92
93#[async_trait]
94impl NetworkService for MockNetworkService {
95 async fn fetch(&self, req: FetchRequest) -> Result<BytesResponse> {
96 let bytes = self.backend.fetch(req.url).await?;
97 Ok(BytesResponse { bytes })
98 }
99
100 async fn read_file(&self, req: ReadFileRequest) -> Result<BytesResponse> {
101 let bytes = self.backend.read_file(req.path).await?;
102 Ok(BytesResponse { bytes })
103 }
104}