use crate::{FilesClient, PaginationInfo, Result};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InboxRegistrationEntity {
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub company: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ip: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub clickwrap_body: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub form_field_set_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub form_field_data: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inbox_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inbox_recipient_id: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub inbox_title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InboxUploadEntity {
#[serde(skip_serializing_if = "Option::is_none")]
pub inbox_registration: Option<InboxRegistrationEntity>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
}
pub struct InboxUploadHandler {
client: FilesClient,
}
impl InboxUploadHandler {
pub fn new(client: FilesClient) -> Self {
Self { client }
}
#[allow(clippy::too_many_arguments)]
pub async fn list(
&self,
cursor: Option<&str>,
per_page: Option<i64>,
sort_by: Option<serde_json::Value>,
filter: Option<serde_json::Value>,
inbox_registration_id: Option<i64>,
inbox_id: Option<i64>,
) -> Result<(Vec<InboxUploadEntity>, PaginationInfo)> {
let mut params = vec![];
if let Some(c) = cursor {
params.push(("cursor", c.to_string()));
}
if let Some(pp) = per_page {
params.push(("per_page", pp.to_string()));
}
if let Some(sb) = sort_by {
params.push(("sort_by", sb.to_string()));
}
if let Some(f) = filter {
params.push(("filter", f.to_string()));
}
if let Some(irid) = inbox_registration_id {
params.push(("inbox_registration_id", irid.to_string()));
}
if let Some(iid) = inbox_id {
params.push(("inbox_id", iid.to_string()));
}
let query = if params.is_empty() {
String::new()
} else {
format!(
"?{}",
params
.iter()
.map(|(k, v)| format!("{}={}", k, v))
.collect::<Vec<_>>()
.join("&")
)
};
let response = self
.client
.get_raw(&format!("/inbox_uploads{}", query))
.await?;
let uploads: Vec<InboxUploadEntity> = serde_json::from_value(response)?;
let pagination = PaginationInfo {
cursor_next: None,
cursor_prev: None,
};
Ok((uploads, pagination))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_handler_creation() {
let client = FilesClient::builder().api_key("test-key").build().unwrap();
let _handler = InboxUploadHandler::new(client);
}
}