sentd 1.0.0

Official Rust SDK for the SENTD Email API
Documentation
use crate::client::Sentd;
use crate::error::Error;
use crate::types::*;

/// Analytics API
pub struct Analytics {
    client: Sentd,
}

impl Analytics {
    pub(crate) fn new(client: Sentd) -> Self {
        Self { client }
    }

    /// Get analytics data
    pub async fn get(&self, params: Option<AnalyticsParams>) -> Result<AnalyticsResponse, Error> {
        let mut query = String::from("/api/analytics");

        if let Some(p) = params {
            let mut parts = vec![];
            if let Some(days) = p.days {
                parts.push(format!("days={}", days));
            }
            if let Some(group_by) = p.group_by {
                parts.push(format!("group_by={}", group_by));
            }
            if !parts.is_empty() {
                query = format!("{}?{}", query, parts.join("&"));
            }
        }

        self.client.get(&query).await
    }

    /// Export analytics as CSV
    pub async fn export_csv(&self, days: Option<i32>) -> Result<String, Error> {
        let mut query = String::from("/api/analytics/export?format=csv");
        if let Some(d) = days {
            query = format!("{}&days={}", query, d);
        }

        let response: ExportResponse = self.client.get(&query).await?;
        Ok(response.data)
    }
}

/// Parameters for analytics queries
#[derive(Debug, Default)]
pub struct AnalyticsParams {
    pub days: Option<i32>,
    pub group_by: Option<String>,
}

#[derive(Debug, serde::Deserialize)]
struct ExportResponse {
    data: String,
}