use std::collections::BTreeMap;
use phoxal::prelude::*;
use phoxal_api::y2026_1 as api;
#[derive(phoxal::Service)]
#[phoxal(id = "asset-store", api = y2026_1)]
struct AssetStore {
assets: BTreeMap<String, Vec<u8>>,
}
#[phoxal::behavior]
impl AssetStore {
#[setup]
async fn setup(_ctx: &mut SetupContext<Self>) -> Result<Self> {
let mut assets = BTreeMap::new();
assets.insert("map.pgm".to_string(), vec![0x50, 0x35, 0x0a]);
Ok(Self { assets })
}
#[server(topic = api::topic::new().asset().get())]
async fn get(
&mut self,
request: api::asset::GetRequest,
) -> ServerResult<api::asset::GetResponse> {
match self.assets.get(&request.path) {
Some(bytes) => Ok(api::asset::GetResponse::Found {
bytes: bytes.clone(),
}),
None => Ok(api::asset::GetResponse::Missing),
}
}
}
fn main() -> phoxal::Result<()> {
phoxal::run::<AssetStore>()
}