#![warn(missing_docs)]
use anyhow::{Context, Result};
use chrono::{TimeZone, Utc};
use serde::Deserialize;
#[derive(Debug, Deserialize)]
struct RepeaterStatus {
last_updated: String,
}
fn get_bm_repeater_last_update(repeater_id: u32) -> Result<String, anyhow::Error> {
let request_url = format!(
"http://api.brandmeister.network/v1.0/repeater/?action=get&q={}",
repeater_id
);
let status: RepeaterStatus = ureq::get(&request_url)
.call()?
.into_json()
.context("error parsing brandmeister API result, ensure repeater id is valid")?;
Ok(status.last_updated)
}
pub fn last_seen_seconds(repeater_id: u32) -> Result<i64> {
let last_update_str = get_bm_repeater_last_update(repeater_id)?;
let last_update = Utc.datetime_from_str(&last_update_str, "%Y-%m-%d %H:%M:%S")?;
Ok(Utc::now().signed_duration_since(last_update).num_seconds())
}