greentic-flow-builder 0.1.0

AI-powered Adaptive Card flow builder with visual graph editor and demo runner
Documentation
//! `GET /api/discovery/search?q=...` — fuzzy/keyword preset lookup.

use crate::ui::state::AppState;
use axum::Json;
use axum::extract::{Query, State};
use serde::Deserialize;
use serde_json::{Value, json};
use std::sync::Arc;

#[derive(Deserialize)]
pub struct SearchQuery {
    pub q: String,
}

pub async fn search(
    State(state): State<Arc<AppState>>,
    Query(query): Query<SearchQuery>,
) -> Json<Value> {
    let matches = state.registry.discovery.find_presets(&query.q);
    let results: Vec<Value> = matches
        .into_iter()
        .map(|m| json!({ "name": m.name, "score": m.score }))
        .collect();
    Json(json!({ "results": results }))
}