diff --git a/Cargo.lock b/Cargo.lock index 3f1ca4ae..a99acd8d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1296,6 +1296,7 @@ dependencies = [ "schematic", "schematic_macros", "schematic_types", + "semver", "serde", "serde_json", "serde_path_to_error", @@ -1353,6 +1354,9 @@ name = "semver" version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" +dependencies = [ + "serde", +] [[package]] name = "serde" diff --git a/README.md b/README.md index a36d2bcc..0b3b6eea 100644 --- a/README.md +++ b/README.md @@ -688,4 +688,5 @@ The following Cargo features are available: - `type_chrono` - Implements schematic for the `chrono` crate. - `type_regex` - Implements schematic for the `regex` crate. - `type_relative_path` - Implements schematic for the `relative-path` crate. +- `type_semver` - Implements schematic for the `semver` crate. - `type_url` - Implements schematic for the `url` crate. diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index 9c841629..eebaa8be 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -84,4 +84,5 @@ starbase_sandbox = "0.1.8" chrono = { workspace = true } regex = { workspace = true } relative-path = { workspace = true, features = ["serde"] } +semver = { workspace = true, features = ["serde"] } url = { workspace = true, features = ["serde"] } diff --git a/crates/config/tests/generator_test.rs b/crates/config/tests/generator_test.rs index 0c151b25..3042a99a 100644 --- a/crates/config/tests/generator_test.rs +++ b/crates/config/tests/generator_test.rs @@ -41,6 +41,8 @@ struct GenConfig { path: PathBuf, rel_path: relative_path::RelativePathBuf, url: Option, + version: Option, + version_req: semver::VersionReq, } fn create_generator() -> SchemaGenerator { diff --git a/crates/config/tests/snapshots/generator_test__json_schema__defaults.snap b/crates/config/tests/snapshots/generator_test__json_schema__defaults.snap index 8b701948..d71e509b 100644 --- a/crates/config/tests/snapshots/generator_test__json_schema__defaults.snap +++ b/crates/config/tests/snapshots/generator_test__json_schema__defaults.snap @@ -19,7 +19,9 @@ expression: "fs::read_to_string(file).unwrap()" "string", "time", "url", - "vector" + "vector", + "version", + "versionReq" ], "properties": { "boolean": { @@ -90,6 +92,19 @@ expression: "fs::read_to_string(file).unwrap()" "items": { "type": "string" } + }, + "version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "versionReq": { + "type": "string" } }, "additionalProperties": false, diff --git a/crates/config/tests/snapshots/generator_test__typescript__const_enums.snap b/crates/config/tests/snapshots/generator_test__typescript__const_enums.snap index 24ebbe43..61cc7abe 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__const_enums.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__const_enums.snap @@ -31,5 +31,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; } diff --git a/crates/config/tests/snapshots/generator_test__typescript__defaults.snap b/crates/config/tests/snapshots/generator_test__typescript__defaults.snap index 6cf5a307..e9dc5464 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__defaults.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__defaults.snap @@ -27,5 +27,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; } diff --git a/crates/config/tests/snapshots/generator_test__typescript__enums.snap b/crates/config/tests/snapshots/generator_test__typescript__enums.snap index 9658d571..20389911 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__enums.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__enums.snap @@ -31,5 +31,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; } diff --git a/crates/config/tests/snapshots/generator_test__typescript__exclude_refs.snap b/crates/config/tests/snapshots/generator_test__typescript__exclude_refs.snap index a5033a17..b70b41de 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__exclude_refs.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__exclude_refs.snap @@ -25,5 +25,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; } diff --git a/crates/config/tests/snapshots/generator_test__typescript__external_types.snap b/crates/config/tests/snapshots/generator_test__typescript__external_types.snap index c5af491c..ed40a64b 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__external_types.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__external_types.snap @@ -29,5 +29,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; } diff --git a/crates/config/tests/snapshots/generator_test__typescript__no_refs.snap b/crates/config/tests/snapshots/generator_test__typescript__no_refs.snap index 8a34d69c..a66a4d9f 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__no_refs.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__no_refs.snap @@ -30,5 +30,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; } diff --git a/crates/config/tests/snapshots/generator_test__typescript__object_aliases.snap b/crates/config/tests/snapshots/generator_test__typescript__object_aliases.snap index b53095f8..3d561efd 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__object_aliases.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__object_aliases.snap @@ -27,5 +27,7 @@ export type GenConfig = { time: string, url: string | null, vector: string[], + version: string | null, + versionReq: string, }; diff --git a/crates/config/tests/snapshots/generator_test__typescript__value_enums.snap b/crates/config/tests/snapshots/generator_test__typescript__value_enums.snap index 731da639..c6a1c0a9 100644 --- a/crates/config/tests/snapshots/generator_test__typescript__value_enums.snap +++ b/crates/config/tests/snapshots/generator_test__typescript__value_enums.snap @@ -31,5 +31,7 @@ export interface GenConfig { time: string; url: string | null; vector: string[]; + version: string | null; + versionReq: string; }