relay-cli 0.1.2

CLI interface for Relay Agents.
use anyhow::{Context, Result, bail};

use crate::transport::agent_base_url;
use relay_lib::prelude::{AgentId, KeyRecord, UserId};

pub fn get_agent_record(agent: &AgentId) -> Result<KeyRecord> {
    let resp = reqwest::blocking::Client::new()
        .get(agent_base_url(agent)?.join("/keys/agent")?)
        .send()
        .context("Failed to send request to fetch agent record")?;

    if !resp.status().is_success() {
        let status = resp.status();
        let body = resp.text().unwrap_or_default();
        bail!("Failed to fetch agent record: {} - {}", status, body);
    }

    resp.json::<KeyRecord>()
        .context("Failed to parse agent record response")
}

pub fn get_user_record(agent: &AgentId, user: UserId) -> Result<KeyRecord> {
    let resp = reqwest::blocking::Client::new()
        .get(agent_base_url(agent)?.join(&format!("/keys/user/{}", user))?)
        .send()
        .context("Failed to send request to fetch user record")?;

    if !resp.status().is_success() {
        let status = resp.status();
        let body = resp.text().unwrap_or_default();
        bail!("Failed to fetch user record: {} - {}", status, body);
    }

    resp.json::<KeyRecord>()
        .context("Failed to parse user record response")
}