use std::error::Error;
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Default)]
#[serde(default, rename_all = "camelCase")]
pub struct LogEntry {
pub user_name: Option<String>,
pub user_id: Option<String>,
pub user_type: Option<String>,
pub actor_id: Option<u64>,
pub actor_type: Option<String>,
pub object_name: Option<String>,
pub object_id: Option<String>,
pub object_type: Option<String>,
pub additional_comment: Option<String>,
pub time: Option<DateTime<Utc>>,
pub event_text: Option<String>,
pub device: Option<String>,
pub browser_details: Option<String>,
pub ip_address: Option<String>,
}
#[derive(Serialize)]
struct ListParams {
#[serde(rename = "user")]
pub user_id: Option<u64>,
pub start: u64,
pub end: Option<u64>,
pub limit: Option<u32>,
pub offset: Option<u32>,
}
impl super::Client {
pub async fn get_entries(
&self,
user_id: Option<u64>,
start: u64,
end: Option<u64>,
limit: Option<u32>,
offset: Option<u32>,
) -> Result<Vec<LogEntry>, Box<dyn Error + Send + Sync + 'static>> {
let at = self.get_access_token("audit").await?;
let q = ListParams {
user_id,
start,
end,
limit,
offset,
};
let mut response = surf::get(&format!("{}{}", self.host, "/v1/audit"))
.query(&q)?
.header("Authorization", at)
.await?;
if !response.status().is_success() {
let e: Box<super::PubAPIError> = response.body_json().await?;
return Err(e);
}
Ok(response.body_json().await?)
}
}