More API improvements.
parent
890bfa3a70
commit
5cc21ed1b5
|
@ -23,10 +23,10 @@ pub struct UploadResponse {
|
|||
impl Client {
|
||||
pub async fn upload(
|
||||
&self,
|
||||
account_id: &str,
|
||||
blob: Vec<u8>,
|
||||
content_type: Option<&str>,
|
||||
) -> crate::Result<UploadResponse> {
|
||||
let account_id = self.default_account_id();
|
||||
let mut upload_url =
|
||||
String::with_capacity(self.session().upload_url().len() + account_id.len());
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ use crate::{
|
|||
const DEFAULT_TIMEOUT_MS: u64 = 10 * 1000;
|
||||
static USER_AGENT: &str = concat!("jmap-client/", env!("CARGO_PKG_VERSION"));
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Credentials {
|
||||
Basic(String),
|
||||
Bearer(String),
|
||||
|
|
|
@ -203,6 +203,10 @@ impl QueryResponse {
|
|||
self.position
|
||||
}
|
||||
|
||||
pub fn unwrap_query_state(&mut self) -> String {
|
||||
std::mem::take(&mut self.query_state)
|
||||
}
|
||||
|
||||
pub fn query_state(&self) -> &str {
|
||||
&self.query_state
|
||||
}
|
||||
|
|
|
@ -284,6 +284,10 @@ impl<O: SetObject> SetResponse<O> {
|
|||
self.destroyed.as_ref().map(|list| list.iter())
|
||||
}
|
||||
|
||||
pub fn unwrap_destroyed_ids(&mut self) -> Option<Vec<String>> {
|
||||
self.destroyed.take()
|
||||
}
|
||||
|
||||
pub fn not_created_ids(&self) -> Option<impl Iterator<Item = &String>> {
|
||||
self.not_created.as_ref().map(|map| map.keys())
|
||||
}
|
||||
|
|
|
@ -34,10 +34,38 @@ impl Client {
|
|||
V: IntoIterator<Item = W>,
|
||||
W: Into<String>,
|
||||
{
|
||||
let blob_id = self.upload(raw_message, None).await?.unwrap_blob_id();
|
||||
self.email_import_account(
|
||||
self.default_account_id(),
|
||||
raw_message,
|
||||
mailbox_ids,
|
||||
keywords,
|
||||
received_at,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn email_import_account<T, U, V, W>(
|
||||
&self,
|
||||
account_id: &str,
|
||||
raw_message: Vec<u8>,
|
||||
mailbox_ids: T,
|
||||
keywords: Option<V>,
|
||||
received_at: Option<i64>,
|
||||
) -> crate::Result<Email>
|
||||
where
|
||||
T: IntoIterator<Item = U>,
|
||||
U: Into<String>,
|
||||
V: IntoIterator<Item = W>,
|
||||
W: Into<String>,
|
||||
{
|
||||
let blob_id = self
|
||||
.upload(account_id, raw_message, None)
|
||||
.await?
|
||||
.unwrap_blob_id();
|
||||
let mut request = self.build();
|
||||
let import_request = request
|
||||
.import_email()
|
||||
.account_id(account_id)
|
||||
.email(blob_id)
|
||||
.mailbox_ids(mailbox_ids);
|
||||
|
||||
|
|
|
@ -78,6 +78,11 @@ impl EmailImportRequest {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn account_id(&mut self, account_id: impl Into<String>) -> &mut Self {
|
||||
self.account_id = account_id.into();
|
||||
self
|
||||
}
|
||||
|
||||
pub fn if_in_state(&mut self, if_in_state: impl Into<String>) -> &mut Self {
|
||||
self.if_in_state = Some(if_in_state.into());
|
||||
self
|
||||
|
|
Loading…
Reference in New Issue