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§
Sourcefn compose(
components: &mut Components,
generics: Vec<RefOr<Schema>>,
) -> RefOr<Schema>
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
impl ComposeSchema for &str
Source§impl ComposeSchema for IpAddr
impl ComposeSchema for IpAddr
Source§impl ComposeSchema for Error
impl ComposeSchema for Error
Source§impl ComposeSchema for Value
impl ComposeSchema for Value
Source§impl ComposeSchema for bool
impl ComposeSchema for bool
Source§impl ComposeSchema for char
impl ComposeSchema for char
Source§impl ComposeSchema for f32
impl ComposeSchema for f32
Source§impl ComposeSchema for f64
impl ComposeSchema for f64
Source§impl ComposeSchema for i8
impl ComposeSchema for i8
Source§impl ComposeSchema for i16
impl ComposeSchema for i16
Source§impl ComposeSchema for i32
impl ComposeSchema for i32
Source§impl ComposeSchema for i64
impl ComposeSchema for i64
Source§impl ComposeSchema for i128
impl ComposeSchema for i128
Source§impl ComposeSchema for isize
impl ComposeSchema for isize
Source§impl ComposeSchema for str
impl ComposeSchema for str
Source§impl ComposeSchema for u8
impl ComposeSchema for u8
Source§impl ComposeSchema for u16
impl ComposeSchema for u16
Source§impl ComposeSchema for u32
impl ComposeSchema for u32
Source§impl ComposeSchema for u64
impl ComposeSchema for u64
Source§impl ComposeSchema for u128
impl ComposeSchema for u128
Source§impl ComposeSchema for usize
impl ComposeSchema for usize
Source§impl ComposeSchema for String
impl ComposeSchema for String
Source§impl ComposeSchema for Ipv4Addr
impl ComposeSchema for Ipv4Addr
Source§impl ComposeSchema for Ipv6Addr
impl ComposeSchema for Ipv6Addr
Source§impl ComposeSchema for NaiveDate
impl ComposeSchema for NaiveDate
Source§impl ComposeSchema for NaiveDateTime
impl ComposeSchema for NaiveDateTime
Source§impl ComposeSchema for CompactString
impl ComposeSchema for CompactString
Source§impl ComposeSchema for Decimal
impl ComposeSchema for Decimal
Source§impl ComposeSchema for StatusError
impl ComposeSchema for StatusError
Source§impl ComposeSchema for RawValue
impl ComposeSchema for RawValue
Source§impl ComposeSchema for Date
impl ComposeSchema for Date
Source§impl ComposeSchema for Duration
impl ComposeSchema for Duration
Source§impl ComposeSchema for OffsetDateTime
impl ComposeSchema for OffsetDateTime
Source§impl ComposeSchema for PrimitiveDateTime
impl ComposeSchema for PrimitiveDateTime
Source§impl ComposeSchema for Ulid
impl ComposeSchema for Ulid
Source§impl ComposeSchema for Url
impl ComposeSchema for Url
Source§impl ComposeSchema for Uuid
impl ComposeSchema for Uuid
Source§impl ComposeSchema for Duration
impl ComposeSchema for Duration
Source§impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for BTreeMap<K, V>
impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for BTreeMap<K, V>
Source§impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for HashMap<K, V>
impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for HashMap<K, V>
Source§impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for IndexMap<K, V>
Available on crate feature indexmap only.
impl<K: ComposeSchema, V: ComposeSchema> ComposeSchema for IndexMap<K, V>
indexmap only.Source§impl<T> ComposeSchema for PhantomData<T>
impl<T> ComposeSchema for PhantomData<T>
Source§impl<T, E> ComposeSchema for Result<T, E>where
T: ComposeSchema,
E: ComposeSchema,
impl<T, E> ComposeSchema for Result<T, E>where
T: ComposeSchema,
E: ComposeSchema,
Source§impl<T: TimeZone> ComposeSchema for DateTime<T>
Available on crate feature chrono only.
impl<T: TimeZone> ComposeSchema for DateTime<T>
chrono only.Source§impl<T: ComposeSchema + ToOwned> ComposeSchema for Cow<'_, T>
impl<T: ComposeSchema + ToOwned> ComposeSchema for Cow<'_, T>
Source§impl<T: ComposeSchema + Array> ComposeSchema for SmallVec<T>
Available on crate feature smallvec only.
impl<T: ComposeSchema + Array> ComposeSchema for SmallVec<T>
smallvec only.Source§impl<T: ComposeSchema> ComposeSchema for &[T]
impl<T: ComposeSchema> ComposeSchema for &[T]
Source§impl<T: ComposeSchema> ComposeSchema for Option<T>
impl<T: ComposeSchema> ComposeSchema for Option<T>
Source§impl<T: ComposeSchema> ComposeSchema for [T]
impl<T: ComposeSchema> ComposeSchema for [T]
Source§impl<T: ComposeSchema> ComposeSchema for Box<T>
impl<T: ComposeSchema> ComposeSchema for Box<T>
Source§impl<T: ComposeSchema> ComposeSchema for BTreeSet<T>
impl<T: ComposeSchema> ComposeSchema for BTreeSet<T>
Source§impl<T: ComposeSchema> ComposeSchema for LinkedList<T>
impl<T: ComposeSchema> ComposeSchema for LinkedList<T>
Source§impl<T: ComposeSchema> ComposeSchema for Rc<T>
impl<T: ComposeSchema> ComposeSchema for Rc<T>
Source§impl<T: ComposeSchema> ComposeSchema for Arc<T>
impl<T: ComposeSchema> ComposeSchema for Arc<T>
Source§impl<T: ComposeSchema> ComposeSchema for Vec<T>
impl<T: ComposeSchema> ComposeSchema for Vec<T>
Source§impl<T: ComposeSchema> ComposeSchema for RefCell<T>
impl<T: ComposeSchema> ComposeSchema for RefCell<T>
Source§impl<T: ComposeSchema> ComposeSchema for HashSet<T>
impl<T: ComposeSchema> ComposeSchema for HashSet<T>
Source§impl<T: ComposeSchema> ComposeSchema for IndexSet<T>
Available on crate feature indexmap only.
impl<T: ComposeSchema> ComposeSchema for IndexSet<T>
indexmap only.