// Copyright (C) 2024 Riften Labs AS // // This software is licensed under the GNU Affero General Public License (AGPL), version 3.0 or later. // A copy of the license can be found in the LICENSE file or at https://www.gnu.org/licenses/agpl-3.0.html use anyhow::Context; use bitcoin_hashes::hex::{FromHex, ToHex}; use bitcoincash::TokenID; use rocket::{get, http::Status, response::status::Custom, serde::json::Json, State}; use serde_json::json; use serde_json::Value; use crate::db::{bcmr::get_token_bcmr, DB}; #[get("/token/")] pub fn token_bcmr(category: Option<&str>, db: &State) -> Result, Custom> { let token_id_hex = category .context("category missing") .map_err(|e| Custom(Status::BadRequest, format!("Error: {}", e)))?; // validate input by parsing it into TokenID let token_id = TokenID::from_hex(token_id_hex) .map_err(|e| Custom(Status::BadRequest, format!("Error: {}", e)))?; let conn = db .bcmr_r .get() .map_err(|e| Custom(Status::InternalServerError, format!("Error: {}", e)))?; let bcmr = get_token_bcmr(&conn, &token_id.to_hex()) .map_err(|e| Custom(Status::InternalServerError, format!("Error: {}", e)))?; Ok(Json(json!(bcmr))) }