1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use serde::ser::SerializeMap;
use serde::Serialize;
use serde::Serializer;
use crate::dsl::schema::DocumentRoot;
use crate::output::JsonSchema;
use crate::output::serialization::properties::serialize_schema;
const SCHEMA_URL: &str = "http://json-schema.org/draft-04/schema#";
impl<'a> Serialize for JsonSchema<'a> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut map = serializer.serialize_map(None)?;
map.serialize_entry("$schema", &self.schema_url)?;
map.serialize_entry("$$version", &self.version)?;
if let Some(schema) = self.root {
serialize_schema(schema, self.dependencies, &mut map)?
}
map.end()
}
}
impl<'a> From<&'a DocumentRoot> for JsonSchema<'a> {
fn from(schema: &'a DocumentRoot) -> Self {
JsonSchema {
root: schema.schema.as_ref(),
version: schema.version,
schema_url: SCHEMA_URL,
dependencies: schema.dependencies.as_ref(),
}
}
}