diff --git a/schemars/tests/expected/validate_newtype.json b/schemars/tests/expected/validate_newtype.json new file mode 100644 index 0000000..796aecd --- /dev/null +++ b/schemars/tests/expected/validate_newtype.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "NewType", + "type": "integer", + "format": "uint8", + "maximum": 10.0, + "minimum": 0.0 +} \ No newline at end of file diff --git a/schemars/tests/validate.rs b/schemars/tests/validate.rs index 9992029..8992df2 100644 --- a/schemars/tests/validate.rs +++ b/schemars/tests/validate.rs @@ -46,3 +46,11 @@ pub struct Inner { fn validate() -> TestResult { test_default_generated_schema::("validate") } + +#[derive(Debug, JsonSchema)] +pub struct NewType(#[validate(range(max = 10))] u8); + +#[test] +fn validate_newtype() -> TestResult { + test_default_generated_schema::("validate_newtype") +} diff --git a/schemars_derive/src/schema_exprs.rs b/schemars_derive/src/schema_exprs.rs index d8740e4..261d6bc 100644 --- a/schemars_derive/src/schema_exprs.rs +++ b/schemars_derive/src/schema_exprs.rs @@ -61,7 +61,7 @@ fn expr_for_field(field: &Field, allow_ref: bool) -> TokenStream { let span = field.original.span(); let gen = quote!(gen); - if allow_ref { + field.validation_attrs.apply_to_schema(if allow_ref { quote_spanned! {span=> { #type_def @@ -75,7 +75,7 @@ fn expr_for_field(field: &Field, allow_ref: bool) -> TokenStream { <#ty as schemars::JsonSchema>::json_schema(#gen) } } - } + }) } pub fn type_for_field_schema(field: &Field, local_id: usize) -> (syn::Type, Option) {