Struct RestrictFormats

Source
#[non_exhaustive]
pub struct RestrictFormats { pub infer_from_meta_schema: bool, pub allowed_formats: BTreeSet<Cow<'static, str>>, }
Expand description

Removes any format values that are not defined by the JSON Schema standard or explicitly allowed by a custom list.

This also applies to subschemas.

By default, this will infer the version of JSON Schema from the schema’s $schema property, and no additional formats will be allowed (even when the JSON schema allows nonstandard formats).

§Example

use schemars::json_schema;
use schemars::transform::{RestrictFormats, Transform};

let mut schema = schemars::json_schema!({
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "anyOf": [
        {
            "type": "string",
            "format": "uuid"
        },
        {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "string",
            "format": "uuid"
        },
        {
            "type": "string",
            "format": "allowed-custom-format"
        },
        {
            "type": "string",
            "format": "forbidden-custom-format"
        }
    ]
});

let mut transform = RestrictFormats::default();
transform.allowed_formats.insert("allowed-custom-format".into());
transform.transform(&mut schema);

assert_eq!(
    schema,
    json_schema!({
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "anyOf": [
            {
                // "uuid" format is defined in draft 2020-12.
                "type": "string",
                "format": "uuid"
            },
            {
                // "uuid" format is not defined in draft-07, so is removed from this subschema.
                "$schema": "http://json-schema.org/draft-07/schema#",
                "type": "string"
            },
            {
                // "allowed-custom-format" format was present in `allowed_formats`...
                "type": "string",
                "format": "allowed-custom-format"
            },
            {
                // ...but "forbidden-custom-format" format was not, so is also removed.
                "type": "string"
            }
        ]
    })
);

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§infer_from_meta_schema: bool

Whether to read the schema’s $schema property to determine which version of JSON Schema is being used, and allow only formats defined in that standard. If this is true but the JSON Schema version can’t be determined because $schema is missing or unknown, then no format values will be removed.

If this is set to false, then only the formats explicitly included in allowed_formats will be allowed.

By default, this is true.

§allowed_formats: BTreeSet<Cow<'static, str>>

Values of the format property in schemas that will always be allowed, regardless of the inferred version of JSON Schema.

Trait Implementations§

Source§

impl Clone for RestrictFormats

Source§

fn clone(&self) -> RestrictFormats

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RestrictFormats

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RestrictFormats

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Transform for RestrictFormats

Source§

fn transform(&mut self, schema: &mut Schema)

Applies the transform to the given Schema. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> GenTransform for T
where T: Transform + Clone + Any + Send,

Source§

fn _as_any(&self) -> &(dyn Any + 'static)

Source§

fn _as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Source§

fn _into_any(self: Box<T>) -> Box<dyn Any>

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.