pub mod api; use api::{NewShareRequest, NewShareResponse, NotifyShareResponse, URI}; use log::debug; use ureq::{self, RequestBuilder}; #[derive(Debug)] pub struct Alias { uri: URI, id: String, } impl Alias { pub fn new(uri: URI, id: &str) -> Self { Self { uri, id: id.into() } } fn add_headers(&self, req: RequestBuilder) -> RequestBuilder { req.header("Sharry-Alias", &self.id) } pub fn create_share( &self, http: &ureq::Agent, data: &NewShareRequest, ) -> Result { let endpoint = self.uri.get_endpoint("alias/upload/new"); let res = self .add_headers(http.post(endpoint)) .send_json(data)? .body_mut() .read_json::()?; debug!("response: {:?}", res); assert!(res.success); assert_eq!(res.message, "Share created."); Ok(Share { alias: self, id: res.id, }) } } #[derive(Debug)] pub struct Share<'t> { alias: &'t Alias, id: String, } impl<'t> Share<'t> { pub fn add_file(&self) {} pub fn notify(&self, http: &ureq::Agent) -> Result<(), ureq::Error> { let endpoint = self .alias .uri .get_endpoint(&format!("alias/mail/notify/{}", &self.id)); let res = self .alias .add_headers(http.post(endpoint)) .send_empty()? .body_mut() .read_json::()?; debug!("response: {:?}", res); Ok(()) } }