Skip to main content

soma_palette/
schema.rs

1//! Schema lookup for a single Palette launcher action.
2
3use soma_application::CatalogSnapshot;
4use soma_provider_core::ProviderSurface;
5
6use crate::dto::LauncherSchemaResponse;
7
8/// Find `id`'s tool across every catalog in `snapshot` and return its
9/// schemas, provided it's still exposed on the Palette surface. `None` means
10/// "not found or no longer palette-exposed" — callers map that to 404.
11#[must_use]
12pub fn find_schema(snapshot: &CatalogSnapshot, id: &str) -> Option<LauncherSchemaResponse> {
13    snapshot
14        .catalogs
15        .iter()
16        .flat_map(|catalog| catalog.tools.iter())
17        .find(|tool| tool.name == id && tool.exposed_on(ProviderSurface::Palette))
18        .map(|tool| LauncherSchemaResponse {
19            id: tool.name.clone(),
20            input_schema: tool.input_schema.clone(),
21            output_schema: tool.output_schema.clone(),
22        })
23}
24
25#[cfg(test)]
26#[path = "schema_tests.rs"]
27mod tests;