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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use quick_type_schema::*;
use schemars::JsonSchema;

#[derive(JsonSchema)]
pub struct MyStruct {
    _a: String,
    _b: Option<String>,
    _c: i32,
    _d: OtherStruct,
    _e: (),
}

#[derive(JsonSchema)]
pub struct OtherStruct {
    _a: String,
}

fn main() {
    let mut gen = CodegenContext::new(None);
    gen.add_type::<MyStruct>();
    gen.add_type::<OtherStruct>();

    let languages = &[
        Language::Typescript,
        Language::JsonSchema,
        Language::CSharp {
            namespace: "polygot".to_owned(),
            framework: Some(CSharpFramework::SystemTextJson),
            array_or_list: ArrayOrList::Array,
            number_type: CSharpNumberType::Double,
            any_type: CSharpAnyType::Object,
        },
        Language::CSharp {
            namespace: "polygot".to_owned(),
            framework: None,
            array_or_list: ArrayOrList::Array,
            number_type: CSharpNumberType::Double,
            any_type: CSharpAnyType::Object,
        },
        Language::Crystal,
        Language::Dart { use_freezed: false },
        Language::Elm {
            module: Some("polygot".to_owned()),
            array_or_list: ArrayOrList::Array,
        },
        Language::Elm {
            module: None,
            array_or_list: ArrayOrList::Array,
        },
        Language::Go {
            package: Some("polygot".to_owned()),
        },
        Language::Go { package: None },
        Language::Haskell {
            module: Some("polygot".to_owned()),
            array_or_list: ArrayOrList::Array,
        },
        Language::Haskell {
            module: None,
            array_or_list: ArrayOrList::Array,
        },
        Language::Python {
            version: PythonVersion::V3_7,
        },
        Language::Ruby {
            strictness: RubyStrictness::Strict,
        },
        Language::Rust {
            derive_debug: true,
            derive_clone: true,
        },
        Language::Smithy {
            package: "polygot".to_owned(),
        },
        Language::Swift {
            struct_or_class: StructOrClass::Class,
            sendable: false,
            swift5_support: false,
            objective_c_support: false,
            mutable_properties: false,
        },
    ];

    for lang in languages {
        eprintln!("--- {}", lang.name());
        eprintln!("{}", gen.finish(lang.clone()));
    }
}