k8s_openapi_codegen_common/templates/
json_schema_props_or.rs
1pub(crate) fn generate(
2 mut writer: impl std::io::Write,
3 type_name: &str,
4 or: Or,
5 json_schema_props_type_name: &str,
6 map_namespace: &impl crate::MapNamespace,
7) -> Result<(), crate::Error> {
8 let local = crate::map_namespace_local_to_string(map_namespace)?;
9
10 let or_variant_name = match or {
11 Or::Array => "Schemas",
12 Or::Bool => "Bool",
13 Or::StringArray => "Strings",
14 };
15
16 let or_variant_type: std::borrow::Cow<'_, str> = match or {
17 Or::Array => format!("std::vec::Vec<{json_schema_props_type_name}>").into(),
18 Or::Bool => "bool".into(),
19 Or::StringArray => "std::vec::Vec<std::string::String>".into(),
20 };
21
22 let mut or_visit = String::new();
23 match or {
24 Or::Array => {
25 use std::fmt::Write;
26
27 writeln!(or_visit, " fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error> where A: {local}serde::de::SeqAccess<'de> {{")?;
28 writeln!(or_visit,
29 " Ok({type_name}::Schemas({local}serde::de::Deserialize::deserialize({local}serde::de::value::SeqAccessDeserializer::new(seq))?))")?;
30 writeln!(or_visit, " }}")?;
31 },
32
33 Or::Bool => {
34 use std::fmt::Write;
35
36 writeln!(or_visit, " fn visit_bool<E>(self, v: bool) -> Result<Self::Value, E> where E: {local}serde::de::Error {{")?;
37 writeln!(or_visit, " Ok({type_name}::Bool(v))")?;
38 writeln!(or_visit, " }}")?;
39 },
40
41 Or::StringArray => {
42 use std::fmt::Write;
43
44 writeln!(or_visit, " fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error> where A: {local}serde::de::SeqAccess<'de> {{")?;
45 writeln!(or_visit,
46 " Ok({type_name}::Strings({local}serde::de::Deserialize::deserialize({local}serde::de::value::SeqAccessDeserializer::new(seq))?))")?;
47 writeln!(or_visit, " }}")?;
48 },
49 }
50
51 writeln!(
52 writer,
53 include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/templates/json_schema_props_or.rs")),
54 local = local,
55 type_name = type_name,
56 json_schema_props_type_name = json_schema_props_type_name,
57 or_variant_name = or_variant_name,
58 or_variant_type = or_variant_type,
59 or_visit = or_visit,
60 )?;
61
62 Ok(())
63}
64
65#[derive(Clone, Copy)]
66pub(crate) enum Or {
67 Array,
68 Bool,
69 StringArray,
70}