use std::collections::{BTreeMap, BTreeSet}; use exver::{Version, VersionRange}; use imbl_value::InternedString; use serde::{Deserialize, Serialize}; use ts_rs::TS; use crate::prelude::*; use crate::registry::asset::RegistryAsset; use crate::registry::context::RegistryContext; use crate::registry::signer::commitment::blake3::Blake3Commitment; use crate::rpc_continuations::Guid; #[derive(Debug, Default, Deserialize, Serialize, HasModel, TS)] #[serde(rename_all = "camelCase")] #[model = "Model"] #[ts(export)] pub struct OsIndex { pub versions: OsVersionInfoMap, } #[derive(Debug, Default, Deserialize, Serialize, TS)] pub struct OsVersionInfoMap( #[ts(as = "BTreeMap::")] pub BTreeMap, ); impl Map for OsVersionInfoMap { type Key = Version; type Value = OsVersionInfo; fn key_str(key: &Self::Key) -> Result, Error> { Ok(InternedString::from_display(key)) } fn key_string(key: &Self::Key) -> Result { Ok(InternedString::from_display(key)) } } #[derive(Debug, Default, Deserialize, Serialize, HasModel, TS)] #[serde(rename_all = "camelCase")] #[model = "Model"] #[ts(export)] pub struct OsVersionInfo { pub headline: String, pub release_notes: String, #[ts(type = "string")] pub source_version: VersionRange, pub authorized: BTreeSet, #[ts(as = "BTreeMap::>")] pub iso: BTreeMap>, // platform (i.e. x86_64-nonfree) -> asset #[ts(as = "BTreeMap::>")] pub squashfs: BTreeMap>, // platform (i.e. x86_64-nonfree) -> asset #[ts(as = "BTreeMap::>")] pub img: BTreeMap>, // platform (i.e. raspberrypi) -> asset } pub async fn get_os_index(ctx: RegistryContext) -> Result { ctx.db.peek().await.into_index().into_os().de() }