add some helper functions
This commit is contained in:
parent
545598d6e9
commit
a9333ee087
2089
Cargo.lock
generated
2089
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
10
Cargo.toml
10
Cargo.toml
@ -4,3 +4,13 @@ version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
genai = { git = "https://github.com/laststylebender14/rust-genai.git", rev = "63a542ce20132503c520f4e07108e0d768f243c3", optional = true }
|
||||
hyper = {version = "1.4.1", features = ["full"]}
|
||||
pdf = "0.9.0"
|
||||
async-trait = "0.1.83"
|
||||
reqwest = "0.12.8"
|
||||
anyhow = "1.0.89"
|
||||
hyper-util = { version = "0.1", features = ["tokio"] }
|
||||
http-body-util = "0.1.0"
|
||||
bytes = "1.7.2"
|
||||
tokio = "1.40.0"
|
||||
|
17
src/io/fs.rs
Normal file
17
src/io/fs.rs
Normal file
@ -0,0 +1,17 @@
|
||||
use bytes::Bytes;
|
||||
use crate::target_rt::FileIO;
|
||||
|
||||
pub struct NativeFileIO {}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl FileIO for NativeFileIO {
|
||||
async fn write<'a>(&'a self, path: &'a str, content: &'a Bytes) -> anyhow::Result<()> {
|
||||
tokio::fs::write(path, content).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn read<'a>(&'a self, path: &'a str) -> anyhow::Result<Bytes> {
|
||||
let vec = tokio::fs::read(path).await?;
|
||||
Ok(Bytes::from(vec))
|
||||
}
|
||||
}
|
16
src/io/http.rs
Normal file
16
src/io/http.rs
Normal file
@ -0,0 +1,16 @@
|
||||
use anyhow::anyhow;
|
||||
|
||||
use reqwest::{Client, Request};
|
||||
use crate::target_rt::HttpIO;
|
||||
|
||||
pub struct NativeHttpIO {
|
||||
client: Client,
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl HttpIO for NativeHttpIO {
|
||||
async fn execute(&self, request: Request) -> anyhow::Result<reqwest::Response> {
|
||||
let resp = self.client.execute(request).await.map_err(|e| anyhow!("{}", e))?;
|
||||
Ok(resp)
|
||||
}
|
||||
}
|
2
src/io/mod.rs
Normal file
2
src/io/mod.rs
Normal file
@ -0,0 +1,2 @@
|
||||
pub mod fs;
|
||||
mod http;
|
2
src/lib.rs
Normal file
2
src/lib.rs
Normal file
@ -0,0 +1,2 @@
|
||||
pub mod target_rt;
|
||||
pub mod io;
|
23
src/target_rt.rs
Normal file
23
src/target_rt.rs
Normal file
@ -0,0 +1,23 @@
|
||||
use std::sync::Arc;
|
||||
use bytes::Bytes;
|
||||
use http_body_util::Full;
|
||||
|
||||
#[async_trait::async_trait]
|
||||
pub trait HttpIO: Sync + Send + 'static {
|
||||
async fn execute(
|
||||
&self,
|
||||
request: reqwest::Request,
|
||||
) -> anyhow::Result<reqwest::Response>;
|
||||
}
|
||||
|
||||
|
||||
#[async_trait::async_trait]
|
||||
pub trait FileIO: Send + Sync {
|
||||
async fn write<'a>(&'a self, path: &'a str, content: &'a Bytes) -> anyhow::Result<()>;
|
||||
async fn read<'a>(&'a self, path: &'a str) -> anyhow::Result<Bytes>;
|
||||
}
|
||||
|
||||
pub struct TargetRuntime {
|
||||
pub http: Arc<dyn HttpIO>,
|
||||
pub fs: Arc<dyn FileIO>,
|
||||
}
|
Loading…
Reference in New Issue
Block a user