Schema

Trait Schema 

Source
pub trait Schema {
    // Required method
    fn schema() -> impl Into<SchemaRef>;
}
Expand description

§OpenAPI Schema trait

§Required

  • schema() -> impl Into<schema::SchemaRef>
    • this impl Into<schema::SchemaRef> mostly means schema::Schema<{something}>.

§Implementation Notes

Generally, you can implement this trait for your types by #[derive(Schema)]. See it’s documentation for more details.

But of course, you can implement it manually if you want to. In that case, start from base schemas:

and, component({name}, {schema}) if you want to name and reuse the schema in the OpenAPI document.

§Example

use ohkami::openapi;

#[derive(openapi::Schema)]
struct MySchema {
    pub id: u32,
    pub name: String,
    pub age: Option<u8>,
}
/* equivalent to: */
impl openapi::Schema for MySchema {
    fn schema() -> impl Into<openapi::schema::SchemaRef> {
        openapi::object()
            .property("id", openapi::integer().format("uint32"))
            .property("name", openapi::string())
            .optional("age", openapi::integer().format("uint8"))
    }
}

#[derive(openapi::Schema)]
#[openapi(component)]
struct MyComponentSchema {
    pub id: u32,
    pub name: String,
    pub age: Option<u8>,
}
/* equivalent to: */
impl openapi::Schema for MyComponentSchema {
    fn schema() -> impl Into<openapi::schema::SchemaRef> {
        openapi::component("MyComponentSchema",  openapi::object()
            .property("id", openapi::integer().format("uint32"))
            .property("name", openapi::string())
            .optional("age", openapi::integer().format("uint8"))
        )
    }
}

§Default Implementations

  • str, String
  • u8, u16, u32, u64, usize
  • i8, i16, i32, i64, isize
  • f32, f64
  • uuid::Uuid
  • Vec<S>, [S], [S; N], Cow<'_, S>, Arc<S>, &S where S: Schema

Required Methods§

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 Schema for f32

Source§

impl Schema for f64

Source§

impl Schema for i8

Source§

impl Schema for i16

Source§

impl Schema for i32

Source§

impl Schema for i64

Source§

impl Schema for isize

Source§

impl Schema for str

Source§

impl Schema for u8

Source§

impl Schema for u16

Source§

impl Schema for u32

Source§

impl Schema for u64

Source§

impl Schema for usize

Source§

impl Schema for String

Source§

impl Schema for Uuid

Source§

impl<S: Schema + ToOwned + ?Sized> Schema for Cow<'_, S>

Source§

impl<S: Schema + ?Sized> Schema for &S

Source§

impl<S: Schema + ?Sized> Schema for Arc<S>

Source§

impl<S: Schema> Schema for [S]

Source§

impl<S: Schema> Schema for Vec<S>

Source§

impl<const N: usize, S: Schema> Schema for [S; N]

Implementors§