Skip to main content

ComposeSchema

Trait ComposeSchema 

Source
pub trait ComposeSchema {
    // Required method
    fn compose(
        components: &mut Components,
        generics: Vec<RefOr<Schema>>,
    ) -> RefOr<Schema>;
}
Expand description

Trait for composing schemas with generic type parameters.

ComposeSchema enables generic types to compose their schemas from externally-provided generic parameter schemas. This separates schema structure generation (compose) from naming and registration (ToSchema).

For non-generic types, the generics parameter is ignored and the schema is generated directly. For generic types, each element in generics corresponds to a type parameter’s schema, in declaration order.

§Examples

Manual implementation for a generic wrapper type:

use salvo_oapi::{BasicType, Components, ComposeSchema, Object, RefOr, Schema};

struct Page<T> {
    items: Vec<T>,
    total: u64,
}

impl<T: ComposeSchema> ComposeSchema for Page<T> {
    fn compose(components: &mut Components, generics: Vec<RefOr<Schema>>) -> RefOr<Schema> {
        let t_schema = generics
            .first()
            .cloned()
            .unwrap_or_else(|| T::compose(components, vec![]));
        Object::new()
            .property("items", salvo_oapi::schema::Array::new().items(t_schema))
            .required("items")
            .property("total", Object::new().schema_type(BasicType::Integer))
            .required("total")
            .into()
    }
}

Required Methods§

Source

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Compose a schema using the provided generic parameter schemas.

The components parameter allows registering nested schemas. The generics vector contains pre-resolved schemas for each type parameter, in the order they appear in the type definition.

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 ComposeSchema for &str

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for IpAddr

Source§

fn compose( components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Error

Source§

fn compose( components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Value

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for bool

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for char

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for f32

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for f64

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for i8

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for i16

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for i32

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for i64

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for i128

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for isize

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for str

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for u8

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for u16

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for u32

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for u64

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for u128

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for usize

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for String

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Ipv4Addr

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Ipv6Addr

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for NaiveDate

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for NaiveDateTime

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for CompactString

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Decimal

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for StatusError

Source§

fn compose( components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Map<String, Value>

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for RawValue

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Date

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Duration

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for OffsetDateTime

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for PrimitiveDateTime

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Ulid

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Url

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Uuid

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl ComposeSchema for Duration

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for BTreeMap<K, V>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for HashMap<K, V>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for IndexMap<K, V>

Available on crate feature indexmap only.
Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T> ComposeSchema for PhantomData<T>

Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T, E> ComposeSchema for Result<T, E>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: TimeZone> ComposeSchema for DateTime<T>

Available on crate feature chrono only.
Source§

fn compose( _components: &mut Components, _generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema + ToOwned> ComposeSchema for Cow<'_, T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema + Array> ComposeSchema for SmallVec<T>

Available on crate feature smallvec only.
Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for &[T]

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for Option<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for [T]

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for Box<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for BTreeSet<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for LinkedList<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for Rc<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for Arc<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for Vec<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for RefCell<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for HashSet<T>

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema> ComposeSchema for IndexSet<T>

Available on crate feature indexmap only.
Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Source§

impl<T: ComposeSchema, const N: usize> ComposeSchema for [T; N]

Source§

fn compose( components: &mut Components, generics: Vec<RefOr<Schema>>, ) -> RefOr<Schema>

Implementors§