use serde_json::{json, Map, Value};
use crate::error::Result;
use crate::transport::{RequestOptions, Transport};
use crate::types::DispatchParams;
pub struct Messaging {
transport: Transport,
}
impl Messaging {
pub fn new(transport: Transport) -> Self {
Self { transport }
}
pub fn dispatch(&self, params: &DispatchParams) -> Result<Value> {
let mut body = Map::new();
body.insert("action".to_string(), json!("send"));
body.insert("project_id".to_string(), json!(params.project_id));
body.insert("channel".to_string(), json!(params.channel));
body.insert("content".to_string(), Value::Object(params.content.clone()));
if let Some(t) = ¶ms.targeting {
body.insert("targeting".to_string(), serde_json::to_value(t).unwrap());
}
if let Some(s) = ¶ms.scheduling {
body.insert("scheduling".to_string(), serde_json::to_value(s).unwrap());
}
if let Some(t) = ¶ms.template_id {
body.insert("template_id".to_string(), json!(t));
}
let opts = RequestOptions::post("/messaging-dispatch", Value::Object(body))
.header("Authorization", format!("Bearer {}", params.access_token))
.gzip(false);
self.transport.request(&opts)
}
}