Undisclosed project number 1234
1use bytes::Bytes;
2use jacquard_common::DefaultStr;
3use jacquard_common::session::SessionStore;
4use jacquard_common::types::blob::Blob;
5use serde::Deserialize;
6use superjam_core::{Did, Nsid};
7use superjam_oauth::Session;
8
9use crate::client::Pds;
10use crate::error::Result;
11use crate::newtype::MimeType;
12
13pub use jacquard_common::types::blob::BlobRef;
14
15pub type UploadedBlob = Blob<DefaultStr>;
16
17impl<S> Pds<S>
18where
19 S: SessionStore<Did, Session> + Clone + Send + Sync + 'static,
20{
21 pub async fn upload_blob(&mut self, bytes: Bytes, mime: &MimeType) -> Result<UploadedBlob> {
22 let nsid =
23 Nsid::new_static("com.atproto.repo.uploadBlob").expect("static NSID well-formed");
24 let url = self.xrpc_url(&nsid)?;
25 let resp: UploadBlobResponse = self.post_bytes(url, bytes, mime).await?;
26 Ok(resp.blob)
27 }
28}
29
30#[derive(Deserialize)]
31struct UploadBlobResponse {
32 blob: UploadedBlob,
33}