shrupl/src/sharry/share.rs

52 lines
1.3 KiB
Rust

use log::debug;
use super::{
alias::{Alias, SharryAlias},
api::{NewShareRequest, NewShareResponse, NotifyShareResponse},
};
#[derive(Debug)]
pub struct Share<'t> {
pub(super) alias: &'t Alias,
pub(super) id: String,
}
impl<'t> Share<'t> {
pub fn create(
http: &ureq::Agent,
alias: &'t Alias,
data: NewShareRequest,
) -> Result<Self, ureq::Error> {
let res = http
.post(alias.get_endpoint("alias/upload/new"))
.sharry_header(alias)
.send_json(data)?
.body_mut()
.read_json::<NewShareResponse>()?;
debug!("response: {res:?}");
if !(res.success && (res.message == "Share created.")) {
return Err(ureq::Error::Other("unexpected json response".into()));
}
Ok(Self { alias, id: res.id })
}
pub fn notify(&self, http: &ureq::Agent) -> Result<(), ureq::Error> {
let endpoint = self
.alias
.get_endpoint(format!("alias/mail/notify/{}", self.id));
let res = http
.post(endpoint)
.sharry_header(self.alias)
.send_empty()?
.body_mut()
.read_json::<NotifyShareResponse>()?;
debug!("response: {res:?}");
Ok(())
}
}