use crate::{
TierMetadata,
export::{json_pretty, json_value},
};
use schemars::JsonSchema;
use serde_json::Value;
use crate::schema::annotations::{apply_metadata_annotations, redact_secret_schema_examples};
use crate::schema::model::{JsonSchemaReport, SCHEMA_EXPORT_FORMAT_VERSION};
#[must_use]
pub fn json_schema_for<T>() -> Value
where
T: JsonSchema,
{
json_value(&schemars::schema_for!(T), Value::Object(Default::default()))
}
#[must_use]
pub fn json_schema_pretty<T>() -> String
where
T: JsonSchema,
{
json_pretty(
&json_schema_for::<T>(),
"{\"error\":\"failed to render schema\"}",
)
}
#[must_use]
pub fn json_schema_report<T>() -> JsonSchemaReport
where
T: JsonSchema,
{
JsonSchemaReport {
format_version: SCHEMA_EXPORT_FORMAT_VERSION,
schema: json_schema_for::<T>(),
}
}
#[must_use]
pub fn json_schema_report_json<T>() -> Value
where
T: JsonSchema,
{
json_value(
&json_schema_report::<T>(),
Value::Object(Default::default()),
)
}
#[must_use]
pub fn json_schema_report_json_pretty<T>() -> String
where
T: JsonSchema,
{
json_pretty(
&json_schema_report_json::<T>(),
"{\"error\":\"failed to render schema report\"}",
)
}
#[must_use]
pub fn annotated_json_schema_for<T>() -> Value
where
T: JsonSchema + TierMetadata,
{
let mut schema = json_schema_for::<T>();
let metadata = T::metadata();
apply_metadata_annotations(&mut schema, &metadata);
let snapshot = schema.clone();
redact_secret_schema_examples(&mut schema, &snapshot);
schema
}
#[must_use]
pub fn annotated_json_schema_pretty<T>() -> String
where
T: JsonSchema + TierMetadata,
{
json_pretty(
&annotated_json_schema_for::<T>(),
"{\"error\":\"failed to render schema\"}",
)
}
#[must_use]
pub fn annotated_json_schema_report<T>() -> JsonSchemaReport
where
T: JsonSchema + TierMetadata,
{
JsonSchemaReport {
format_version: SCHEMA_EXPORT_FORMAT_VERSION,
schema: annotated_json_schema_for::<T>(),
}
}
#[must_use]
pub fn annotated_json_schema_report_json<T>() -> Value
where
T: JsonSchema + TierMetadata,
{
json_value(
&annotated_json_schema_report::<T>(),
Value::Object(Default::default()),
)
}
#[must_use]
pub fn annotated_json_schema_report_json_pretty<T>() -> String
where
T: JsonSchema + TierMetadata,
{
json_pretty(
&annotated_json_schema_report_json::<T>(),
"{\"error\":\"failed to render schema report\"}",
)
}