redis_enterprise/
jsonschema.rs

1//! JSON Schema definitions for API validation
2//!
3//! ## Overview
4//! - Get schema for API objects
5//! - Validate request/response formats
6//! - Query available schemas
7
8use crate::client::RestClient;
9use crate::error::Result;
10use serde_json::Value;
11
12/// JSON Schema handler for API schema definitions
13pub struct JsonSchemaHandler {
14    client: RestClient,
15}
16
17impl JsonSchemaHandler {
18    pub fn new(client: RestClient) -> Self {
19        JsonSchemaHandler { client }
20    }
21
22    /// Get all available schemas
23    pub async fn list(&self) -> Result<Vec<String>> {
24        self.client.get("/v1/jsonschema").await
25    }
26
27    /// Get schema for a specific object type
28    pub async fn get(&self, schema_name: &str) -> Result<Value> {
29        self.client
30            .get(&format!("/v1/jsonschema/{}", schema_name))
31            .await
32    }
33
34    /// Get schema for database object
35    pub async fn database_schema(&self) -> Result<Value> {
36        self.client.get("/v1/jsonschema/bdb").await
37    }
38
39    /// Get schema for cluster object
40    pub async fn cluster_schema(&self) -> Result<Value> {
41        self.client.get("/v1/jsonschema/cluster").await
42    }
43
44    /// Get schema for node object
45    pub async fn node_schema(&self) -> Result<Value> {
46        self.client.get("/v1/jsonschema/node").await
47    }
48
49    /// Get schema for user object
50    pub async fn user_schema(&self) -> Result<Value> {
51        self.client.get("/v1/jsonschema/user").await
52    }
53
54    /// Get schema for CRDB object
55    pub async fn crdb_schema(&self) -> Result<Value> {
56        self.client.get("/v1/jsonschema/crdb").await
57    }
58
59    /// Validate an object against its schema
60    pub async fn validate(&self, schema_name: &str, object: &Value) -> Result<Value> {
61        self.client
62            .post(&format!("/v1/jsonschema/{}/validate", schema_name), object)
63            .await
64    }
65}