Implement JsonSchema for nonzero unsigned ints
This commit is contained in:
parent
cc896739d3
commit
a35b469475
2 changed files with 47 additions and 2 deletions
|
@ -32,16 +32,17 @@ macro_rules! forward_impl {
|
||||||
}
|
}
|
||||||
|
|
||||||
mod array;
|
mod array;
|
||||||
|
#[cfg(std_atomic)]
|
||||||
|
mod atomic;
|
||||||
#[cfg(feature = "chrono")]
|
#[cfg(feature = "chrono")]
|
||||||
mod chrono;
|
mod chrono;
|
||||||
mod core;
|
mod core;
|
||||||
mod ffi;
|
mod ffi;
|
||||||
mod maps;
|
mod maps;
|
||||||
|
mod nonzero_unsigned;
|
||||||
mod primitives;
|
mod primitives;
|
||||||
mod sequences;
|
mod sequences;
|
||||||
mod serdejson;
|
mod serdejson;
|
||||||
mod time;
|
mod time;
|
||||||
mod tuple;
|
mod tuple;
|
||||||
mod wrapper;
|
mod wrapper;
|
||||||
#[cfg(std_atomic)]
|
|
||||||
mod atomic;
|
|
44
schemars/src/json_schema_impls/nonzero_unsigned.rs
Normal file
44
schemars/src/json_schema_impls/nonzero_unsigned.rs
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
use crate::gen::SchemaGenerator;
|
||||||
|
use crate::schema::*;
|
||||||
|
use crate::JsonSchema;
|
||||||
|
use std::num::*;
|
||||||
|
|
||||||
|
macro_rules! nonzero_unsigned_impl {
|
||||||
|
($type:ty => $primitive:ty) => {
|
||||||
|
impl JsonSchema for $type {
|
||||||
|
no_ref_schema!();
|
||||||
|
|
||||||
|
fn schema_name() -> String {
|
||||||
|
stringify!($type).to_owned()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn json_schema(gen: &mut SchemaGenerator) -> Schema {
|
||||||
|
let mut schema: SchemaObject = <$primitive>::json_schema(gen).into();
|
||||||
|
schema.number().minimum = Some(1.0);
|
||||||
|
schema.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
nonzero_unsigned_impl!(NonZeroU8 => u8);
|
||||||
|
nonzero_unsigned_impl!(NonZeroU16 => u16);
|
||||||
|
nonzero_unsigned_impl!(NonZeroU32 => u32);
|
||||||
|
nonzero_unsigned_impl!(NonZeroU64 => u64);
|
||||||
|
nonzero_unsigned_impl!(NonZeroU128 => u128);
|
||||||
|
nonzero_unsigned_impl!(NonZeroUsize => usize);
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::tests::schema_object_for;
|
||||||
|
use pretty_assertions::assert_eq;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn schema_for_atomics() {
|
||||||
|
let schema = schema_object_for::<NonZeroU32>();
|
||||||
|
assert_eq!(schema.number.unwrap().minimum, Some(1.0));
|
||||||
|
assert_eq!(schema.instance_type, Some(InstanceType::Integer.into()));
|
||||||
|
assert_eq!(schema.format, Some("uint32".to_owned()));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue