- Implement
JsonSchema
for types fromrust_decimal
andbigdecimal
crates (GREsau#101)
- Fixes for internally tagged enums and flattening additional_properties (GREsau#113)
- Implement
JsonSchema
forEnumSet
(GREsau#92)
- Do not cause compile error when using a default value that doesn't implement
Serialize
(GREsau#115)
- Use
oneOf
instead ofanyOf
for enums when possible (GREsau#108)
- Allow fields with plain
#[validate]
attributes (GREsau#109)
#[schemars(schema_with = "...")]
attribute can now be set on enum variants.- Deriving JsonSchema will now take into account
#[validate(...)]
attributes, compatible with the validator crate (GREsau#78)
- Support for
#[schemars(crate = "...")]
attribute to allow deriving JsonSchema when the schemars crate is aliased to a different name (GREsau#55 / GREsau#80) - Implement
JsonSchema
forbytes::Bytes
andbytes::BytesMut
(GREsau#68)
- Enable generating a schema from any serializable value using
schema_for_value!(...)
macro orSchemaGenerator::root_schema_for_value()
/SchemaGenerator::into_root_schema_for_value()
methods (GREsau#75) #[derive(JsonSchema_repr)]
can be used on C-like enums for generating a serde_repr-compatible schema (GREsau#76)- Implement
JsonSchema
forurl::Url
(GREsau#63)
SchemaGenerator::definitions_mut()
which returns a mutable reference to the generator's schema definitions- Implement
JsonSchema
for slices
- Minimum supported rust version is now 1.37.0
- Deriving JsonSchema on enums now sets
additionalProperties
to false on generated schemas wherever serde doesn't accept unknown properties. This includes non-unit variants of externally tagged enums, and struct-style variants of all enums that have thedeny_unknown_fields
attribute. - Schemas for HashSet and BTreeSet now have
uniqueItems
set to true (GREsau#64)
- Fix use of
#[serde(transparent)]
in combination with#[schemars(with = ...)]
(GREsau#67) - Fix clippy
field_reassign_with_default
warning in schemars_derive generated code in rust <1.51 (GREsau#65) - Prevent stack overflow when using
inline_subschemas
with recursive types
visit::Visitor
, a trait for updating a schema and all schemas it contains recursively. ASchemaSettings
can now contain a list of visitors.into_object()
method added toSchema
as a shortcut forinto::<SchemaObject>()
- Preserve order of schema properties under
preserve_order
feature flag (GREsau#32) SchemaGenerator::take_definitions()
which behaves similarly to the now-removedinto_definitions()
method but without consuming the generatorSchemaGenerator::visitors_mut()
which returns an iterator over a generator's settings's visitorsSchemaSettings::inline_subschemas
- enforces inlining of all subschemas instead of using references (GREsau#44)
SchemaSettings::bool_schemas
- this has been superseded by theReplaceBoolSchemas
visitorSchemaSettings::allow_ref_siblings
- this has been superseded by theRemoveRefSiblings
visitorSchemaSettings
no longer implementsPartialEq
SchemaGenerator::into_definitions()
- this has been superseded bySchemaGenerator::take_definitions()
- BREAKING CHANGE Minimum supported rust version is now 1.36.0
- BREAKING CHANGE unknown items in
#[schemars(...)]
attributes now cause a compilation error (GREsau#18)
make_extensible
,schema_for_any
, andschema_for_none
methods onSchemaGenerator
#[schemars(example = "...")]
attribute for setting examples on generated schemas (GREsau#23)
- Setting
#[deprecated]
attribute will now cause generated schemas to have thedeprecated
property set totrue
- Respect
#[serde(transparent)]
attribute (GREsau#17) #[schemars(title = "...", description = "...")]
can now be used to set schema title/description. If present, these values will be used instead of doc comments (GREsau#13)
- schemars_derive is now an optional dependency, but included by default
- If a struct is annotated with
#[serde(deny_unknown_fields)]
, generated schema will haveadditionalProperties
set tofalse
(GREsau#30) - Set
type
property tostring
on simple enums (GREsau#28)
#[schemars(schema_with = "...")]
attribute can be set on variants and fields. This allows you to specify another function which returns the schema you want, which is particularly useful on fields of types that don't implement the JsonSchema trait (GREsau#15)
#[serde(with = "...")]
/#[schemars(with = "...")]
attributes on enum variants are now respected- Some compiler errors generated by schemars_derive should now have more accurate spans
- Enable deriving JsonSchema on adjacent tagged enums (GREsau#4)
- Added
examples
(https://tools.ietf.org/html/draft-handrews-json-schema-validation-02#section-9.5) toMetadata
- Fixed a bug in schemars_derive causing a compile error when the
default
,skip_serializing_if
, andserialize_with
/with
attributes are used together (GREsau#26)
- BREAKING CHANGE -
SchemaSettings
can no longer be created using struct initialization syntax. Instead, if you need to use custom schema settings, you can use a constructor function and either:- assign it to a
mut
variable and modify its public fields - call the
with(|s| ...)
method on the settings and modify the settings inside the closure/function (as in the custom_settings.rs example)
- assign it to a
- When deriving
JsonSchema
on structs,Option<T>
struct fields are no longer included in the list of required properties in the schema (GREsau#11) - Fix deriving
JsonSchema
when a non-stdString
type is in scope (GREsau#19) - This will now compile:
#[schemars(with="()")]
- Added
allow_ref_siblings
setting toSchemaSettings
. When enabled, schemas with a$ref
property may have other properties set. - Can create JSON Schema 2019-09 schemas using
SchemaSettings::draft2019_09()
(which enablesallow_ref_siblings
)
- Implemented
JsonSchema
on types fromsmallvec
andarrayvec
(as optional dependencies)
- Implemented
JsonSchema
on types fromindexmap
,either
anduuid
(as optional dependencies)
- Remove trait bounds from Map/Set JsonSchema impls. They are unnecessary as we never create/use any instances of these types.
- No actual code changes - this version was just published to fix broken README on crates.io
- Documentation website available at https://graham.cool/schemars/!
- Rename
derive_json_schema
toimpl_json_schema
.derive_json_schema
is still available for backward-compatibility, but will be removed in a future version. - Improve schema naming for deriving on remote types. A
#[serde(remote = "Duration")]
attribute is now treated similarly to#[serde(rename = "Duration")]
. - Ensure root schemas do not have a
$ref
property. If necessary, wrap the$ref
in anallOf
.
- Fix a compile error that can occur when deriving
JsonSchema
from a project that doesn't reference serde_json
- When deriving
JsonSchema
, the schema'stitle
anddescription
are now set from#[doc]
comments (GREsau#7) - When deriving
JsonSchema
on structs using a#[serde(default)]
attribute, the schema's properties will now includedefault
, unless the default value is skipped by the field'sskip_serializing_if
function (GREsau#6)
- When the
option_nullable
setting is enabled (e.g. for openapi 3), schemas forOption<T>
will no longer inlineT
's schema when it should be referenceable.
- Added missing doc comment for
title
schema property
- Implemented
JsonSchema
for more standard library types (GREsau#3)
- Unsigned integer types (usize, u8 etc.) now have their
minimum
explicitly set to zero - Made prepositions/conjunctions in generated schema names lowercase
- e.g. schema name for
Result<MyStruct, Vec<String>>
has changed from "Result_Of_MyStruct_Or_Array_Of_String" to "Result_of_MyStruct_or_Array_of_String"
- e.g. schema name for
- Some provided
JsonSchema
implementations with the sametype
but differentformat
s (e.g.i8
andusize
) used thetype
as their name. They have now been updated to useformat
as their name.- Previously, schema generation would incorrectly assume types such as
MyStruct<i8>
andMyStruct<usize>
were identical, and give them a single schema definition calledMyStruct_for_Integer
despite the fact they should have different schemas. Now they will each have their own schema (MyStruct_for_i8
andMyStruct_for_usize
respectively).
- Previously, schema generation would incorrectly assume types such as