architect_schemars/json_schema_impls/
either.rs

1use crate::r#gen::SchemaGenerator;
2use crate::schema::*;
3use crate::JsonSchema;
4use either::Either;
5use std::borrow::Cow;
6
7impl<L: JsonSchema, R: JsonSchema> JsonSchema for Either<L, R> {
8    no_ref_schema!();
9
10    fn schema_name() -> String {
11        format!("Either_{}_or_{}", L::schema_name(), R::schema_name())
12    }
13
14    fn schema_id() -> Cow<'static, str> {
15        Cow::Owned(format!(
16            "either::Either<{}, {}>",
17            L::schema_id(),
18            R::schema_id()
19        ))
20    }
21
22    fn json_schema(generator: &mut SchemaGenerator) -> Schema {
23        let mut schema = SchemaObject::default();
24        schema.subschemas().any_of = Some(vec![
25            generator.subschema_for::<L>(),
26            generator.subschema_for::<R>(),
27        ]);
28        schema.into()
29    }
30}