169 lines
4.5 KiB
Rust
169 lines
4.5 KiB
Rust
#![allow(clippy::approx_constant)]
|
|
|
|
use crate::prelude::*;
|
|
|
|
static THREE: f64 = 3.0;
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(JsonSchema)]
|
|
#[schemars(extend("obj" = {"array": [null, ()]}))]
|
|
#[schemars(extend("3" = THREE), extend("pi" = THREE + 0.14))]
|
|
struct Struct {
|
|
#[schemars(extend("foo" = "bar"))]
|
|
value: Value,
|
|
#[schemars(extend("type" = ["number", "string"]))]
|
|
int: i32,
|
|
}
|
|
|
|
#[test]
|
|
fn extend_struct() {
|
|
test!(Struct).assert_snapshot().custom(|schema, _| {
|
|
assert_eq!(schema.get("obj"), Some(&json!({ "array": [null, null] })));
|
|
assert_eq!(schema.get("3"), Some(&json!(3.0)));
|
|
assert_eq!(schema.get("pi"), Some(&json!(3.14)));
|
|
assert_eq!(
|
|
schema.as_value().pointer("/properties/value"),
|
|
Some(&json!({ "foo": "bar" }))
|
|
);
|
|
assert_eq!(
|
|
schema.as_value().pointer("/properties/int/type"),
|
|
Some(&json!(["number", "string"]))
|
|
);
|
|
});
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(JsonSchema)]
|
|
#[schemars(extend("obj" = {"array": [null, ()]}))]
|
|
#[schemars(extend("3" = THREE), extend("pi" = THREE + 0.14))]
|
|
struct TupleStruct(
|
|
#[schemars(extend("foo" = "bar"))] Value,
|
|
#[schemars(extend("type" = ["number", "string"]))] usize,
|
|
);
|
|
|
|
#[test]
|
|
fn extend_tuple_struct() {
|
|
test!(TupleStruct).assert_snapshot().custom(|schema, _| {
|
|
assert_eq!(schema.get("obj"), Some(&json!({ "array": [null, null] })));
|
|
assert_eq!(schema.get("3"), Some(&json!(3.0)));
|
|
assert_eq!(schema.get("pi"), Some(&json!(3.14)));
|
|
assert_eq!(
|
|
schema.as_value().pointer("/prefixItems/0"),
|
|
Some(&json!({ "foo": "bar" }))
|
|
);
|
|
assert_eq!(
|
|
schema.as_value().pointer("/prefixItems/1/type"),
|
|
Some(&json!(["number", "string"]))
|
|
);
|
|
});
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(JsonSchema)]
|
|
#[schemars(extend("foo" = "bar"))]
|
|
enum ExternalEnum {
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Unit,
|
|
#[schemars(extend("foo" = "bar"))]
|
|
NewType(Value),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Tuple(i32, bool),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Struct { i: i32, b: bool },
|
|
}
|
|
|
|
#[test]
|
|
fn extend_externally_tagged_enum() {
|
|
test!(ExternalEnum).assert_snapshot().custom(|schema, _| {
|
|
assert_eq!(schema.get("foo"), Some(&json!("bar")));
|
|
|
|
for i in 0..4 {
|
|
assert_eq!(
|
|
schema.as_value().pointer(&format!("/oneOf/{i}/foo")),
|
|
Some(&json!("bar"))
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(JsonSchema)]
|
|
#[schemars(tag = "t", extend("foo" = "bar"))]
|
|
enum InternalEnum {
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Unit,
|
|
#[schemars(extend("foo" = "bar"))]
|
|
NewType(Value),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Struct { i: i32, b: bool },
|
|
}
|
|
|
|
#[test]
|
|
fn extend_internally_tagged_enum() {
|
|
test!(InternalEnum).assert_snapshot().custom(|schema, _| {
|
|
assert_eq!(schema.get("foo"), Some(&json!("bar")));
|
|
|
|
for i in 0..3 {
|
|
assert_eq!(
|
|
schema.as_value().pointer(&format!("/oneOf/{i}/foo")),
|
|
Some(&json!("bar"))
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(JsonSchema)]
|
|
#[schemars(tag = "t", content = "c", extend("foo" = "bar"))]
|
|
enum AdjacentEnum {
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Unit,
|
|
#[schemars(extend("foo" = "bar"))]
|
|
NewType(Value),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Tuple(i32, bool),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Struct { i: i32, b: bool },
|
|
}
|
|
|
|
#[test]
|
|
fn extend_adjacently_tagged_enum() {
|
|
test!(AdjacentEnum).assert_snapshot().custom(|schema, _| {
|
|
assert_eq!(schema.get("foo"), Some(&json!("bar")));
|
|
|
|
for i in 0..4 {
|
|
assert_eq!(
|
|
schema.as_value().pointer(&format!("/oneOf/{i}/foo")),
|
|
Some(&json!("bar"))
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(JsonSchema)]
|
|
#[schemars(untagged, extend("foo" = "bar"))]
|
|
enum UntaggedEnum {
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Unit,
|
|
#[schemars(extend("foo" = "bar"))]
|
|
NewType(Value),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Tuple(i32, bool),
|
|
#[schemars(extend("foo" = "bar"))]
|
|
Struct { i: i32, b: bool },
|
|
}
|
|
|
|
#[test]
|
|
fn extend_untagged_enum() {
|
|
test!(UntaggedEnum).assert_snapshot().custom(|schema, _| {
|
|
assert_eq!(schema.get("foo"), Some(&json!("bar")));
|
|
|
|
for i in 0..4 {
|
|
assert_eq!(
|
|
schema.as_value().pointer(&format!("/anyOf/{i}/foo")),
|
|
Some(&json!("bar"))
|
|
);
|
|
}
|
|
});
|
|
}
|