From c529c8b8eadef48e151f8b736ffb7b8161710b20 Mon Sep 17 00:00:00 2001 From: Alex Groleau Date: Sun, 15 Mar 2026 23:03:03 -0400 Subject: [PATCH] added jspg_schemas for mixer --- src/lib.rs | 17 +++++++++++++++++ src/tests/mod.rs | 16 ++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 5d2bc35..0c67ee1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -110,6 +110,23 @@ pub fn jspg_validate(schema_id: &str, instance: JsonB) -> JsonB { } } +#[cfg_attr(not(test), pg_extern)] +pub fn jspg_schemas() -> JsonB { + let engine_opt = { + let lock = GLOBAL_JSPG.read().unwrap(); + lock.clone() + }; + + match engine_opt { + Some(engine) => { + let schemas_json = serde_json::to_value(&engine.database.schemas) + .unwrap_or(serde_json::Value::Object(serde_json::Map::new())); + JsonB(schemas_json) + } + None => JsonB(serde_json::Value::Object(serde_json::Map::new())), + } +} + #[cfg_attr(not(test), pg_extern)] pub fn jspg_stems() -> JsonB { let engine_opt = { diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 48f03dc..fbda713 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -49,6 +49,22 @@ fn test_library_api() { }) ); + // 3. Validate jspg_schemas + let schemas_drop = jspg_schemas(); + assert_eq!( + schemas_drop.0, + json!({ + "test_schema": { + "$id": "test_schema", + "type": "object", + "properties": { + "name": { "type": "string" } + }, + "required": ["name"] + } + }) + ); + // 4. Validate Happy Path let happy_drop = jspg_validate("test_schema", JsonB(json!({"name": "Neo"}))); assert_eq!(