use crate::{
config::config,
emit_response,
lrs::resources::{Headers, WithResource},
About, DataError, Extensions, MyError, MyVersion, EXT_STATS, EXT_USERS, EXT_VERBS,
STATS_EXT_BASE, USERS_EXT_BASE, V200, VERBS_EXT_BASE,
};
use rocket::{get, routes};
use serde_json::Value;
use std::str::FromStr;
use tracing::debug;
#[doc(hidden)]
pub fn routes() -> Vec<rocket::Route> {
routes![get]
}
#[get("/")]
async fn get() -> Result<WithResource<About>, MyError> {
debug!("----- get -----");
let x = build_about().map_err(MyError::Data)?;
emit_response!(Headers::default(), x => About)
}
fn build_about() -> Result<About, DataError> {
let versions = vec![MyVersion::from_str(V200)?];
let mut extensions = Extensions::default();
extensions.add(
EXT_VERBS,
&Value::String(config().to_external_url(VERBS_EXT_BASE)),
)?;
extensions.add(
EXT_STATS,
&Value::String(config().to_external_url(STATS_EXT_BASE)),
)?;
extensions.add(
EXT_USERS,
&Value::String(config().to_external_url(USERS_EXT_BASE)),
)?;
Ok(About::new(versions, extensions))
}