use chrono::{DateTime, Utc};
use serde_json::{json, Value};
fn err_json(e: car_integrations::IntegrationError) -> String {
use car_integrations::IntegrationError::*;
let code = match &e {
Unavailable(_) => "unavailable",
Backend(_) => "backend",
NotImplemented(_) => "not_implemented",
};
json!({"code": code, "message": e.to_string()}).to_string()
}
fn val_err(e: impl std::fmt::Display) -> String {
json!({"code": "backend", "message": e.to_string()}).to_string()
}
fn parse_err(msg: String) -> String {
json!({"code": "parse", "message": msg}).to_string()
}
pub fn calendar_list() -> Result<Value, String> {
let r = car_integrations::calendar::list_calendars().map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}
pub fn calendar_events(
start: DateTime<Utc>,
end: DateTime<Utc>,
calendar_ids: &[String],
) -> Result<Value, String> {
let r = car_integrations::calendar::list_events(start, end, calendar_ids)
.map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}
pub fn contacts_containers() -> Result<Value, String> {
let r = car_integrations::contacts::list_containers().map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}
pub fn contacts_list(query: &str, container_ids: &[String], limit: usize) -> Result<Value, String> {
let r = car_integrations::contacts::list_contacts(query, container_ids, limit)
.map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}
pub fn mail_accounts() -> Result<Value, String> {
let r = car_integrations::mail::list_accounts().map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}
pub fn mail_inbox(account_ids: &[String]) -> Result<Value, String> {
let r = car_integrations::mail::list_inbox(account_ids).map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}
pub fn mail_send(req_json: &str) -> Result<Value, String> {
let req: car_integrations::mail::SendRequest =
serde_json::from_str(req_json).map_err(|e| parse_err(format!("parse SendRequest: {}", e)))?;
let r = car_integrations::mail::send(req).map_err(err_json)?;
serde_json::to_value(&r).map_err(val_err)
}