112 lines
2.9 KiB
Rust
112 lines
2.9 KiB
Rust
use crate::prelude::*;
|
|
use pretty_assertions::assert_eq;
|
|
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
struct SimpleStruct {
|
|
foo: i32,
|
|
}
|
|
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
#[schemars(rename = "new-name")]
|
|
struct RenamedSimpleStruct {
|
|
foo: i32,
|
|
}
|
|
|
|
#[test]
|
|
fn simple() {
|
|
test!(SimpleStruct)
|
|
.custom(|schema, _| assert_eq!(schema.get("title"), Some(&"SimpleStruct".into())));
|
|
|
|
test!(RenamedSimpleStruct)
|
|
.custom(|schema, _| assert_eq!(schema.get("title"), Some(&"new-name".into())));
|
|
}
|
|
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
struct TypeParams<T, U, V, W> {
|
|
t: T,
|
|
u: U,
|
|
v: V,
|
|
w: W,
|
|
}
|
|
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
#[schemars(rename = "new name~{W}/{T}/{T}!")]
|
|
struct RenamedTypeParams<T, U, V, W> {
|
|
t: T,
|
|
u: U,
|
|
v: V,
|
|
w: W,
|
|
}
|
|
|
|
#[test]
|
|
fn type_params() {
|
|
test!(TypeParams<u8, String, bool, ()>)
|
|
.assert_allows_ser_roundtrip_default()
|
|
.assert_identical::<TypeParams<u8, Box<str>, bool, ()>>();
|
|
|
|
assert_ne!(
|
|
<TypeParams<u8, String, bool, ()>>::schema_id(),
|
|
<TypeParams<(), u8, String, bool>>::schema_id()
|
|
);
|
|
|
|
test!(RenamedTypeParams<u8, String, bool, ()>)
|
|
.assert_allows_ser_roundtrip_default()
|
|
.assert_identical::<RenamedTypeParams<u8, Box<str>, bool, ()>>()
|
|
.custom(|schema, _| {
|
|
assert_eq!(
|
|
schema.get("title"),
|
|
Some(&"new name~null/uint8/uint8!".into())
|
|
)
|
|
});
|
|
|
|
assert_ne!(
|
|
<RenamedTypeParams<u8, String, bool, ()>>::schema_id(),
|
|
<RenamedTypeParams<(), u8, String, bool>>::schema_id()
|
|
);
|
|
|
|
test!((
|
|
TypeParams<u8, String, bool, ()>,
|
|
RenamedTypeParams<u8, String, bool, ()>
|
|
))
|
|
.assert_allows_ser_roundtrip_default()
|
|
.custom(|schema, _| {
|
|
assert_eq!(
|
|
schema.pointer("/prefixItems/1/$ref"),
|
|
Some(&("#/$defs/new%20name~0null~1uint8~1uint8!".into())),
|
|
"name should be correctly encoded for $ref value"
|
|
)
|
|
});
|
|
}
|
|
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
struct ConstGeneric<const INT: usize, const CHAR: char> {
|
|
#[schemars(range(max = INT))]
|
|
foo: i32,
|
|
}
|
|
|
|
#[derive(JsonSchema, Deserialize, Serialize, Default)]
|
|
#[schemars(rename = "{{new-name-{INT}}}")]
|
|
struct RenamedConstGeneric<const INT: usize, const CHAR: char> {
|
|
#[schemars(range(max = INT))]
|
|
foo: i32,
|
|
}
|
|
|
|
#[test]
|
|
fn const_generics() {
|
|
test!(ConstGeneric<123, 'X'>).assert_allows_ser_roundtrip_default();
|
|
|
|
assert_ne!(
|
|
<ConstGeneric<123, 'X'>>::schema_id(),
|
|
<ConstGeneric<321, 'Y'>>::schema_id()
|
|
);
|
|
|
|
test!(RenamedConstGeneric<123, 'X'>)
|
|
.assert_allows_ser_roundtrip_default()
|
|
.custom(|schema, _| assert_eq!(schema.get("title"), Some(&"{new-name-123}".into())));
|
|
|
|
assert_ne!(
|
|
<RenamedConstGeneric<123, 'X'>>::schema_id(),
|
|
<RenamedConstGeneric<321, 'Y'>>::schema_id()
|
|
);
|
|
}
|