architect_schemars/json_schema_impls/
semver.rs

1use crate::r#gen::SchemaGenerator;
2use crate::schema::*;
3use crate::JsonSchema;
4use semver::Version;
5use std::borrow::Cow;
6
7impl JsonSchema for Version {
8    no_ref_schema!();
9
10    fn schema_name() -> String {
11        "Version".to_owned()
12    }
13
14    fn schema_id() -> Cow<'static, str> {
15        Cow::Borrowed("semver::Version")
16    }
17
18    fn json_schema(_: &mut SchemaGenerator) -> Schema {
19        SchemaObject {
20            instance_type: Some(InstanceType::String.into()),
21            string: Some(Box::new(StringValidation {
22                // https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
23                pattern: Some(r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$".to_owned()),
24                ..Default::default()
25            })),
26            ..Default::default()
27        }
28        .into()
29    }
30}