upload.rs
989 Bytes
use std::fmt::Display;
use super::super::error::*;
use super::super::client::Client;
use crate::upload::upload::Upload;
#[derive(Debug, Clone)]
pub struct UploadApi {
client :Client,
}
impl UploadApi {
pub(crate) async fn new() -> Result<UploadApi> {
let client = Client::new()?;
Ok(UploadApi { client })
}
pub(crate) async fn store(&self, upload :&Upload) -> Result<&UploadApi> {
let response = self.client.post_stream( "/api/v0/upload"
, &upload.mime_type()
, upload.size()
, upload.data() ).await?;
match response.status() {
202 => Ok(self),
status => Err(Self::status_error(status)),
}
}
fn status_error<I: Display>(status :I) -> Error {
let err_str = format!("Invalid response status: {}", status);
Error::from(err_str.as_str())
}
}