pub trait BuildSchema {
// Required method
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent;
// Provided methods
fn type_name() -> Option<&'static str> { ... }
fn schema_metadata() -> SchemaMetadata { ... }
}Expand description
Trait for types that can build their schema representation.
This trait is typically derived using #[derive(BuildSchema)], but can also
be implemented manually for custom schema generation.
§Type Registration
Types can optionally provide a type_name() to register themselves in the
schema’s $types namespace. This is useful for:
- Creating reusable type definitions
- Enabling type references across the schema
- Providing meaningful names in generated schemas
Primitive types typically return None for type_name().
Required Methods§
Sourcefn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Build the schema content for this type.
Use ctx.build::<T>() for nested types - this handles caching
and recursion automatically.
Provided Methods§
Sourcefn type_name() -> Option<&'static str>
fn type_name() -> Option<&'static str>
The type name for registration in $types namespace.
Return Some("my-type") to register this type as $types.my-type.
Return None (default) for inline/anonymous types.
Sourcefn schema_metadata() -> SchemaMetadata
fn schema_metadata() -> SchemaMetadata
Optional metadata for this type’s schema node.
Override to provide description, deprecation status, defaults, or examples.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl BuildSchema for &str
impl BuildSchema for &str
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for bool
impl BuildSchema for bool
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for f32
impl BuildSchema for f32
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for f64
impl BuildSchema for f64
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for i8
impl BuildSchema for i8
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for i16
impl BuildSchema for i16
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for i32
impl BuildSchema for i32
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for i64
impl BuildSchema for i64
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for i128
impl BuildSchema for i128
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for isize
impl BuildSchema for isize
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for u8
impl BuildSchema for u8
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for u16
impl BuildSchema for u16
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for u32
impl BuildSchema for u32
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for u64
impl BuildSchema for u64
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for u128
impl BuildSchema for u128
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for ()
impl BuildSchema for ()
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for usize
impl BuildSchema for usize
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for String
impl BuildSchema for String
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl BuildSchema for Text
impl BuildSchema for Text
fn build_schema(_ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<A: BuildSchema + 'static> BuildSchema for (A,)
impl<A: BuildSchema + 'static> BuildSchema for (A,)
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<A: BuildSchema + 'static, B: BuildSchema + 'static> BuildSchema for (A, B)
impl<A: BuildSchema + 'static, B: BuildSchema + 'static> BuildSchema for (A, B)
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static> BuildSchema for (A, B, C)
impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static> BuildSchema for (A, B, C)
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static, D: BuildSchema + 'static> BuildSchema for (A, B, C, D)
impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static, D: BuildSchema + 'static> BuildSchema for (A, B, C, D)
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static, D: BuildSchema + 'static, E: BuildSchema + 'static> BuildSchema for (A, B, C, D, E)
impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static, D: BuildSchema + 'static, E: BuildSchema + 'static> BuildSchema for (A, B, C, D, E)
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static, D: BuildSchema + 'static, E: BuildSchema + 'static, F: BuildSchema + 'static> BuildSchema for (A, B, C, D, E, F)
impl<A: BuildSchema + 'static, B: BuildSchema + 'static, C: BuildSchema + 'static, D: BuildSchema + 'static, E: BuildSchema + 'static, F: BuildSchema + 'static> BuildSchema for (A, B, C, D, E, F)
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<K: BuildSchema + 'static, V: BuildSchema + 'static> BuildSchema for BTreeMap<K, V>
BTreeMap<K, V> is represented as a map
impl<K: BuildSchema + 'static, V: BuildSchema + 'static> BuildSchema for BTreeMap<K, V>
BTreeMap<K, V> is represented as a map
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<K: BuildSchema + 'static, V: BuildSchema + 'static> BuildSchema for HashMap<K, V>
HashMap<K, V> is represented as a map
impl<K: BuildSchema + 'static, V: BuildSchema + 'static> BuildSchema for HashMap<K, V>
HashMap<K, V> is represented as a map
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<T: BuildSchema + 'static> BuildSchema for Option<T>
Option is represented as a union: some(T) | none(null)
impl<T: BuildSchema + 'static> BuildSchema for Option<T>
Option
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<T: BuildSchema + 'static> BuildSchema for Box<T>
Box delegates to T
impl<T: BuildSchema + 'static> BuildSchema for Box<T>
Box
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<T: BuildSchema + 'static> BuildSchema for Rc<T>
Rc delegates to T
impl<T: BuildSchema + 'static> BuildSchema for Rc<T>
Rc
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<T: BuildSchema + 'static> BuildSchema for Arc<T>
Arc delegates to T
impl<T: BuildSchema + 'static> BuildSchema for Arc<T>
Arc
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<T: BuildSchema + 'static> BuildSchema for Vec<T>
Vec is represented as an array with item type T
impl<T: BuildSchema + 'static> BuildSchema for Vec<T>
Vec
fn build_schema(ctx: &mut SchemaBuilder) -> SchemaNodeContent
Source§impl<T: BuildSchema + 'static, E: BuildSchema + 'static> BuildSchema for Result<T, E>
Result<T, E> is represented as a union: ok(T) | err(E)
impl<T: BuildSchema + 'static, E: BuildSchema + 'static> BuildSchema for Result<T, E>
Result<T, E> is represented as a union: ok(T) | err(E)