diff --git a/src/new_index/query.rs b/src/new_index/query.rs index 2d0017a..1f49aff 100644 --- a/src/new_index/query.rs +++ b/src/new_index/query.rs @@ -271,6 +271,15 @@ impl Query { ) } + #[cfg(feature = "liquid")] + pub fn lookup_registry_asset(&self, asset_id: &AssetId) -> Result> { + let asset_db = self + .asset_db + .as_ref() + .chain_err(|| "asset registry unavailable")?; + Ok(asset_db.read().unwrap().get(asset_id).cloned()) + } + #[cfg(feature = "liquid")] pub fn list_registry_assets( &self, diff --git a/src/rest.rs b/src/rest.rs index 1334b6a..106d81b 100644 --- a/src/rest.rs +++ b/src/rest.rs @@ -1864,6 +1864,21 @@ fn handle_request( .unwrap()) } + #[cfg(feature = "liquid")] + (&Method::GET, Some(&"assets"), Some(&"registry"), Some(asset_str), None, None) => { + let asset_id = AssetId::from_str(asset_str)?; + let registry_entry = query + .lookup_registry_asset(&asset_id) + .map_err(|e| { + HttpError(StatusCode::SERVICE_UNAVAILABLE, e.description().to_string()) + })? + .ok_or_else(|| { + HttpError::not_found("Asset id not found in registry".to_string()) + })?; + + json_response(registry_entry, TTL_SHORT) + } + #[cfg(feature = "liquid")] (&Method::GET, Some(&"asset"), Some(asset_str), None, None, None) => { let asset_id = AssetId::from_str(asset_str)?;