Skip to main content

specta_jsonschema/
schema_version.rs

1use serde::{Deserialize, Serialize};
2
3/// JSON Schema version specification
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
5pub enum SchemaVersion {
6    /// JSON Schema Draft 7 (2018) - Most widely supported
7    Draft7,
8    /// JSON Schema Draft 2019-09
9    Draft2019_09,
10    /// JSON Schema Draft 2020-12 (latest)
11    Draft2020_12,
12}
13
14impl SchemaVersion {
15    /// Returns the $schema URI for this version
16    pub fn uri(&self) -> &'static str {
17        match self {
18            Self::Draft7 => "http://json-schema.org/draft-07/schema#",
19            Self::Draft2019_09 => "https://json-schema.org/draft/2019-09/schema",
20            Self::Draft2020_12 => "https://json-schema.org/draft/2020-12/schema",
21        }
22    }
23
24    /// Returns the key used for definitions in this version
25    /// Draft 7 uses "definitions", newer versions use "$defs"
26    pub fn definitions_key(&self) -> &'static str {
27        match self {
28            Self::Draft7 => "definitions",
29            Self::Draft2019_09 | Self::Draft2020_12 => "$defs",
30        }
31    }
32}
33
34impl Default for SchemaVersion {
35    fn default() -> Self {
36        Self::Draft7
37    }
38}