seamapi-rs 0.1.1

A Rust client for Seam
Documentation
use anyhow::{bail, Context, Result};
use serde::{Deserialize, Serialize};

pub struct Events(pub String, pub String);

#[derive(Serialize, Deserialize)]
pub struct Event {
    pub event_id: String,
    pub event_type: String,
    pub created_at: String,
    pub device_id: String,
    pub workspace_id: String,
    pub battery_level: Option<f64>,
}

impl Events {
    pub fn list(self, since: String, device_id: Option<String>) -> Result<Vec<Event>> {
        let url = format!("{}/events/list", self.1);
        let header = format!("Bearer {}", self.0);

        let mut map = std::collections::HashMap::new();
        map.insert("since", since);
        if device_id != None {
            map.insert("device_id", device_id.unwrap());
        }

        let req = reqwest::blocking::Client::new()
            .get(url)
            .header("Authorization", header)
            .json(&map)
            .send()
            .context("Failed to send get request")?;

        if req.status() != reqwest::StatusCode::OK {
            bail!("{}", req.text().context("Really bad API error")?);
        }

        let json: crate::Response = req.json().context("Failed to deserialize JSON")?;
        Ok(json.events.unwrap())
    }
}