Skip to main content

JsonSchema

Trait JsonSchema 

Source
pub trait JsonSchema {
    // Required methods
    fn schema_name() -> Cow<'static, str>;
    fn json_schema(generator: &mut SchemaGenerator) -> Schema;

    // Provided methods
    fn inline_schema() -> bool { ... }
    fn schema_id() -> Cow<'static, str> { ... }
}
Expand description

A type which can be described as a JSON Schema document.

This is implemented for many Rust primitive and standard library types.

This can also be automatically derived on most custom types with #[derive(JsonSchema)] by enabling the derive feature flag (which is enabled by default). For more info on deriving JsonSchema, see the derive macro documentation.

§Examples

Deriving an implementation:

use schemars::{schema_for, JsonSchema};

#[derive(JsonSchema)]
struct MyStruct {
    foo: i32,
}

let my_schema = schema_for!(MyStruct);

When manually implementing JsonSchema, as well as determining an appropriate schema, you will need to determine an appropriate name and ID for the type. For non-generic types, the type name/path are suitable for this:

use schemars::{SchemaGenerator, Schema, JsonSchema, json_schema};
use std::borrow::Cow;

struct NonGenericType;

impl JsonSchema for NonGenericType {
    fn schema_name() -> Cow<'static, str> {
        // Exclude the module path to make the name in generated schemas clearer.
        "NonGenericType".into()
    }

    fn schema_id() -> Cow<'static, str> {
        // Include the module, in case a type with the same name is in another module/crate
        concat!(module_path!(), "::NonGenericType").into()
    }

    fn json_schema(_gen: &mut SchemaGenerator) -> Schema {
        json_schema!({
            "foo": "bar"
        })
    }
}

assert_eq!(NonGenericType::schema_id(), <&mut NonGenericType>::schema_id());

But generic type parameters which may affect the generated schema should typically be included in the name/ID:

use schemars::{SchemaGenerator, Schema, JsonSchema, json_schema};
use std::{borrow::Cow, marker::PhantomData};

struct GenericType<T>(PhantomData<T>);

impl<T: JsonSchema> JsonSchema for GenericType<T> {
    fn schema_name() -> Cow<'static, str> {
        format!("GenericType_{}", T::schema_name()).into()
    }

    fn schema_id() -> Cow<'static, str> {
        format!(
            "{}::GenericType<{}>",
            module_path!(),
            T::schema_id()
        ).into()
    }

    fn json_schema(_gen: &mut SchemaGenerator) -> Schema {
        json_schema!({
            "foo": "bar"
        })
    }
}

assert_eq!(<GenericType<i32>>::schema_id(), <&mut GenericType<&i32>>::schema_id());

Required Methods§

Source

fn schema_name() -> Cow<'static, str>

The name of the generated JSON Schema.

This is used as the title for root schemas, and the key within the root’s definitions property for subschemas.

Source

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type.

If the returned schema depends on any non-inlined schemas, then this method will add them to the SchemaGenerator’s schema definitions.

This should not return a $ref schema.

Provided Methods§

Source

fn inline_schema() -> bool

Whether JSON Schemas generated for this type should be included directly in parent schemas, rather than being re-used where possible using the $ref keyword.

For trivial types (such as primitives), this should return true. For more complex types, it should return false. For recursive types, this must return false to prevent infinite cycles when generating schemas.

By default, this returns false.

Source

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type.

This does not have to be a human-readable string, and the value will not itself be included in generated schemas. If two types produce different schemas, then they must have different schema_id()s, but two types that produce identical schemas should ideally have the same schema_id().

The default implementation returns the same value as schema_name().

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl JsonSchema for ()

Source§

impl JsonSchema for Atomic<bool>

Source§

impl JsonSchema for Atomic<i8>

Source§

impl JsonSchema for Atomic<i16>

Source§

impl JsonSchema for Atomic<i32>

Source§

impl JsonSchema for Atomic<i64>

Source§

impl JsonSchema for Atomic<isize>

Source§

impl JsonSchema for Atomic<u8>

Source§

impl JsonSchema for Atomic<u16>

Source§

impl JsonSchema for Atomic<u32>

Source§

impl JsonSchema for Atomic<u64>

Source§

impl JsonSchema for Atomic<usize>

Source§

impl JsonSchema for CStr

Source§

impl JsonSchema for CString

Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl JsonSchema for Duration

Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl JsonSchema for IpAddr

Source§

impl JsonSchema for Ipv4Addr

Source§

impl JsonSchema for Ipv6Addr

Source§

impl JsonSchema for Map<String, Value>

Source§

impl JsonSchema for NonZero<i8>

Source§

impl JsonSchema for NonZero<i16>

Source§

impl JsonSchema for NonZero<i32>

Source§

impl JsonSchema for NonZero<i64>

Source§

impl JsonSchema for NonZero<i128>

Source§

impl JsonSchema for NonZero<isize>

Source§

impl JsonSchema for NonZero<u8>

Source§

impl JsonSchema for NonZero<u16>

Source§

impl JsonSchema for NonZero<u32>

Source§

impl JsonSchema for NonZero<u64>

Source§

impl JsonSchema for NonZero<u128>

Source§

impl JsonSchema for NonZero<usize>

Source§

impl JsonSchema for Number

Source§

impl JsonSchema for OsStr

Source§

impl JsonSchema for OsString

Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl JsonSchema for Path

Source§

impl JsonSchema for PathBuf

Source§

impl JsonSchema for SocketAddr

Source§

impl JsonSchema for SocketAddrV4

Source§

impl JsonSchema for SocketAddrV6

Source§

impl JsonSchema for String

Source§

impl JsonSchema for SystemTime

Available on crate feature std only.
Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl JsonSchema for bool

Source§

impl JsonSchema for char

Source§

impl JsonSchema for f32

Source§

impl JsonSchema for f64

Source§

impl JsonSchema for i8

Source§

impl JsonSchema for i16

Source§

impl JsonSchema for i32

Source§

impl JsonSchema for i64

Source§

impl JsonSchema for i128

Source§

impl JsonSchema for isize

Source§

impl JsonSchema for str

Source§

impl JsonSchema for u8

Source§

impl JsonSchema for u16

Source§

impl JsonSchema for u32

Source§

impl JsonSchema for u64

Source§

impl JsonSchema for u128

Source§

impl JsonSchema for usize

Source§

impl<'a, T> JsonSchema for &'a T
where T: JsonSchema + ?Sized,

Source§

impl<'a, T> JsonSchema for &'a mut T
where T: JsonSchema + ?Sized,

Source§

impl<'a, T> JsonSchema for Cow<'a, T>
where T: ToOwned + JsonSchema + ?Sized,

Source§

impl<'a> JsonSchema for Arguments<'a>

Source§

impl<K, V, H> JsonSchema for HashMap<K, V, H>
where K: JsonSchema, V: JsonSchema,

Source§

impl<K, V> JsonSchema for BTreeMap<K, V>
where K: JsonSchema, V: JsonSchema,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema, T3: JsonSchema, T4: JsonSchema, T5: JsonSchema, T6: JsonSchema, T7: JsonSchema, T8: JsonSchema, T9: JsonSchema, T10: JsonSchema, T11: JsonSchema, T12: JsonSchema, T13: JsonSchema, T14: JsonSchema, T15: JsonSchema,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema, T3: JsonSchema, T4: JsonSchema, T5: JsonSchema, T6: JsonSchema, T7: JsonSchema, T8: JsonSchema, T9: JsonSchema, T10: JsonSchema, T11: JsonSchema, T12: JsonSchema, T13: JsonSchema, T14: JsonSchema,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7, T8)

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7> JsonSchema for (T0, T1, T2, T3, T4, T5, T6, T7)

Source§

impl<T0, T1, T2, T3, T4, T5, T6> JsonSchema for (T0, T1, T2, T3, T4, T5, T6)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema, T3: JsonSchema, T4: JsonSchema, T5: JsonSchema, T6: JsonSchema,

Source§

impl<T0, T1, T2, T3, T4, T5> JsonSchema for (T0, T1, T2, T3, T4, T5)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema, T3: JsonSchema, T4: JsonSchema, T5: JsonSchema,

Source§

impl<T0, T1, T2, T3, T4> JsonSchema for (T0, T1, T2, T3, T4)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema, T3: JsonSchema, T4: JsonSchema,

Source§

impl<T0, T1, T2, T3> JsonSchema for (T0, T1, T2, T3)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema, T3: JsonSchema,

Source§

impl<T0, T1, T2> JsonSchema for (T0, T1, T2)
where T0: JsonSchema, T1: JsonSchema, T2: JsonSchema,

Source§

impl<T0, T1> JsonSchema for (T0, T1)
where T0: JsonSchema, T1: JsonSchema,

Source§

impl<T0> JsonSchema for (T0,)
where T0: JsonSchema,

Source§

impl<T, E> JsonSchema for Result<T, E>
where T: JsonSchema, E: JsonSchema,

Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl<T, H> JsonSchema for HashSet<T, H>
where T: JsonSchema,

Source§

impl<T> JsonSchema for Arc<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for BTreeSet<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for BinaryHeap<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for Bound<T>
where T: JsonSchema,

Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl<T> JsonSchema for Box<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for Cell<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for LinkedList<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for Mutex<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for Option<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for PhantomData<T>
where T: ?Sized,

Source§

impl<T> JsonSchema for Range<T>
where T: JsonSchema,

Source§

fn schema_name() -> Cow<'static, str>

Source§

fn schema_id() -> Cow<'static, str>

Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Source§

impl<T> JsonSchema for RangeInclusive<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for Rc<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for RefCell<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for Reverse<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for RwLock<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for Vec<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for VecDeque<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for Weak<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for Weak<T>
where T: JsonSchema + ?Sized,

Source§

impl<T> JsonSchema for Wrapping<T>
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 0]

Source§

impl<T> JsonSchema for [T; 1]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 2]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 3]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 4]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 5]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 6]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 7]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 8]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 9]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 10]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 11]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 12]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 13]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 14]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 15]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 16]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 17]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 18]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 19]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 20]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 21]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 22]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 23]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 24]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 25]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 26]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 27]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 28]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 29]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 30]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 31]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T; 32]
where T: JsonSchema,

Source§

impl<T> JsonSchema for [T]
where T: JsonSchema,

Implementors§

Source§

impl JsonSchema for Acks

Source§

impl JsonSchema for AdaptiveBatchConfig

Source§

impl JsonSchema for Auth

Source§

impl JsonSchema for AuthReference

Source§

impl JsonSchema for BasicAuth

Source§

impl JsonSchema for BatchCheck

Source§

impl JsonSchema for BigQueryCredentials

Source§

impl JsonSchema for BigQuerySinkConfig

Source§

impl JsonSchema for CastOnError

Source§

impl JsonSchema for CastType

Source§

impl JsonSchema for CdcTls

Source§

impl JsonSchema for CompareOp

Source§

impl JsonSchema for CompressionConfig

Source§

impl JsonSchema for CompressionType

Source§

impl JsonSchema for CsvSinkConfig

Source§

impl JsonSchema for CsvSourceConfig

Source§

impl JsonSchema for ElasticsearchAuth

Source§

impl JsonSchema for ElasticsearchSinkConfig

Source§

impl JsonSchema for ElasticsearchSourceConfig

Source§

impl JsonSchema for ExplodeSpec

Source§

impl JsonSchema for FilterOp

Source§

impl JsonSchema for FilterSpec

Source§

impl JsonSchema for GcsCredentials

Source§

impl JsonSchema for GcsFileFormat

Source§

impl JsonSchema for GcsSinkConfig

Source§

impl JsonSchema for GcsSourceConfig

Source§

impl JsonSchema for GraphqlAuth

Source§

impl JsonSchema for GraphqlPagination

Source§

impl JsonSchema for GraphqlStreamConfig

Source§

impl JsonSchema for GrpcAuth

Source§

impl JsonSchema for GrpcStreamConfig

Source§

impl JsonSchema for HttpBatchMode

Source§

impl JsonSchema for HttpSinkAuth

Source§

impl JsonSchema for HttpSinkConfig

Source§

impl JsonSchema for JsonType

Source§

impl JsonSchema for JsonlSinkConfig

Source§

impl JsonSchema for KafkaAuth

Source§

impl JsonSchema for KafkaSinkConfig

Source§

impl JsonSchema for KafkaSinkTopic

Source§

impl JsonSchema for KafkaSourceConfig

Source§

impl JsonSchema for KafkaValueFormat

Source§

impl JsonSchema for KeyCaseMode

Source§

impl JsonSchema for MetadataEntry

Source§

impl JsonSchema for MongoSinkConfig

Source§

impl JsonSchema for MongoSourceConfig

Source§

impl JsonSchema for MssqlColumnMapping

Source§

impl JsonSchema for MssqlConnectionConfig

Source§

impl JsonSchema for MssqlReplication

Source§

impl JsonSchema for MssqlSinkConfig

Source§

impl JsonSchema for MssqlSourceConfig

Source§

impl JsonSchema for MssqlTls

Source§

impl JsonSchema for MssqlTlsMode

Source§

impl JsonSchema for MysqlColumnMapping

Source§

impl JsonSchema for MysqlSinkConfig

Source§

impl JsonSchema for MysqlSourceConfig

Source§

impl JsonSchema for OffsetReset

Source§

impl JsonSchema for OnBatchError

Source§

impl JsonSchema for OnDecodeError

Source§

impl JsonSchema for OnFailure

Source§

impl JsonSchema for OnKeyError

Source§

impl JsonSchema for OnMissing

Source§

impl JsonSchema for OnParseError

Source§

impl JsonSchema for OnUnknownField

Source§

impl JsonSchema for PaginationStyle

Source§

impl JsonSchema for ParquetCompression

Source§

impl JsonSchema for ParquetDestination

Source§

impl JsonSchema for ParquetLocation

Source§

impl JsonSchema for ParquetS3Config

Source§

impl JsonSchema for ParquetS3Destination

Source§

impl JsonSchema for ParquetSinkConfig

Source§

impl JsonSchema for ParquetSourceConfig

Source§

impl JsonSchema for PostgresCdcSourceConfig

Source§

impl JsonSchema for PostgresColumnMapping

Source§

impl JsonSchema for PostgresSinkConfig

Source§

impl JsonSchema for PostgresSourceConfig

Source§

impl JsonSchema for QualitySpec

Source§

impl JsonSchema for RecordCheck

Source§

impl JsonSchema for RedisSinkConfig

Source§

impl JsonSchema for RedisSinkType

Source§

impl JsonSchema for RedisSourceConfig

Source§

impl JsonSchema for RedisSourceType

Source§

impl JsonSchema for ReplicationMethod

Source§

impl JsonSchema for RestStreamConfig

Source§

impl JsonSchema for RpcKind

Source§

impl JsonSchema for S3FileFormat

Source§

impl JsonSchema for S3SinkConfig

Source§

impl JsonSchema for S3SourceConfig

Source§

impl JsonSchema for Schema

Source§

impl JsonSchema for SchemaRegistryConfig

Source§

impl JsonSchema for SchemaSource

Source§

impl JsonSchema for ScramMechanism

Source§

impl JsonSchema for SlotType

Source§

impl JsonSchema for SnowflakeAuth

Source§

impl JsonSchema for SnowflakeSinkConfig

Source§

impl JsonSchema for SqliteColumnMapping

Source§

impl JsonSchema for SqliteSinkConfig

Source§

impl JsonSchema for SqliteSourceConfig

Source§

impl JsonSchema for StdStream

Source§

impl JsonSchema for StdoutFormat

Source§

impl JsonSchema for StdoutSinkConfig

Source§

impl JsonSchema for Value

Source§

impl JsonSchema for ValueCaseMode

Source§

impl JsonSchema for WebhookSourceConfig

Source§

impl JsonSchema for WebsocketAuth

Source§

impl JsonSchema for WebsocketSourceConfig

Source§

impl JsonSchema for WsMessageFormat

Source§

impl JsonSchema for XmlAuth

Source§

impl JsonSchema for XmlPagination

Source§

impl JsonSchema for XmlStreamConfig

Source§

impl<A> JsonSchema for AuthSpec<A>
where A: JsonSchema,