seamapi-rs 0.1.1

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

pub struct ActionAttempts(pub String, pub String);

#[derive(Deserialize, Serialize, Debug)]
pub struct ActionAttempt {
    pub status: String,
    pub action_type: String,
    pub action_attempt_id: String,
    pub result: Value,
    pub error: Value,
}

impl ActionAttempts {
    pub fn get(self, action_attempt_id: String) -> Result<ActionAttempt> {
        let url = format!(
            "{}/action_attempts/get?action_attempt_id={}",
            self.1, action_attempt_id
        );
        let header = format!("Bearer {}", self.0);

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

        if req.status() == reqwest::StatusCode::NOT_FOUND {
            bail!("Action Attempt not found");
        } else if req.status() != reqwest::StatusCode::OK {
            bail!("{}", req.text().context("Really bad API failue")?);
        }

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