Menu
Public repository / b78e3a5270c5c5e1b0b04f1da8da4899aa5e4e22
AkurAI-Notes / crates/notes-api/src/handlers/meta.rs
Latest change 3f3c3218239131fdc60fb9196283c9a0162898a9 - E04: notes-core entities + CRUD handlers + collections schema + seed data by Claude Code
use crate::router_setup::{internal_error, json_response, NotesState};
use akurai_http::{Request, Response};
use akurai_json::Value;
use std::sync::{Arc, Mutex};
pub fn meta_route(state: Arc<Mutex<NotesState>>) -> Box<dyn Fn(&Request) -> Response + Send + Sync> {
Box::new(move |_req: &Request| {
let state = match state.lock() {
Ok(s) => s,
Err(_) => return internal_error("lock poisoned"),
};
let objects: Vec<Value> = state
.objects
.iter()
.map(|obj| {
let fields: Vec<Value> = obj
.fields
.iter()
.map(|f| {
Value::Object(vec![
("name".into(), Value::Str(f.name.into())),
("type".into(), Value::Str(f.field_type.into())),
("required".into(), Value::Bool(f.required)),
("embed".into(), Value::Bool(f.embed)),
])
})
.collect();
Value::Object(vec![
("name".into(), Value::Str(obj.name.into())),
("fields".into(), Value::Array(fields)),
])
})
.collect();
json_response(Value::Object(vec![
("version".into(), Value::Str("0.0.1".into())),
("objects".into(), Value::Array(objects)),
]))
})
}