use serde_json::json;
use a2ui::core::capabilities::{
ClientCapabilitiesBuilder, ClientCapabilitiesEnvelope, ServerCapabilitiesEnvelope,
};
use a2ui::core::message_processor::MessageProcessor;
use a2ui::tui::catalogs::basic::build_basic_catalog;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut processor = MessageProcessor::new(vec![build_basic_catalog()]);
let native_ids = processor.registered_catalog_ids();
println!("== Native catalog IDs ==");
for id in &native_ids {
println!(" - {id}");
}
let inline_catalog = json!({
"catalogId": "https://a2ui.org/specification/v1_0/catalogs/inline/catalog.json",
"components": {
"Greeting": {}
},
"functions": {
"shout": {
"returnType": "string",
"args": {
"properties": {"value": {}}
}
}
}
});
processor.register_inline_catalog(inline_catalog.clone())?;
let all_ids = processor.registered_catalog_ids();
println!("\n== Catalog IDs after inline registration ==");
for id in &all_ids {
println!(" - {id}");
}
let client_caps = ClientCapabilitiesBuilder::from_catalog_ids(native_ids.clone())
.with_inline_catalog(inline_catalog.clone())?
.build();
let client_envelope = ClientCapabilitiesEnvelope { v1_0: client_caps };
let client_json = serde_json::to_string_pretty(&client_envelope)?;
println!("\n== Client capabilities (a2uiClientCapabilities) ==");
println!("{client_json}");
let server_raw = json!({
"v1.0": {
"supportedCatalogIds": [
"https://a2ui.org/specification/v1_0/catalogs/minimal/catalog.json",
"https://a2ui.org/specification/v1_0/catalogs/basic/catalog.json"
],
"acceptsInlineCatalogs": true
}
});
let server_env: ServerCapabilitiesEnvelope =
serde_json::from_value(server_raw).expect("server capabilities should deserialize");
let server_json = serde_json::to_string_pretty(&server_env)?;
println!("\n== Server capabilities (a2uiServerCapabilities, round-tripped) ==");
println!("{server_json}");
println!("\nHandshake complete: server accepts inline catalogs = {}",
server_env.v1_0.accepts_inline_catalogs);
Ok(())
}