daml_codegen/renderer/
data_renderer.rs1use proc_macro2::TokenStream;
2
3use self::full::quote_daml_enum as quote_daml_enum_full;
4use self::full::quote_daml_record as quote_daml_record_full;
5use self::full::quote_daml_template as quote_daml_template_full;
6use self::full::quote_daml_variant as quote_daml_variant_full;
7use self::intermediate::quote_daml_enum as quote_daml_enum_intermediate;
8use self::intermediate::quote_daml_record as quote_daml_record_intermediate;
9use self::intermediate::quote_daml_template as quote_daml_template_intermediate;
10use self::intermediate::quote_daml_variant as quote_daml_variant_intermediate;
11use crate::generator::RenderMethod;
12use daml_lf::element::DamlData;
13
14use crate::renderer::RenderContext;
15use quote::quote;
16
17pub mod full {
18    mod quote_choices;
19    mod quote_contract_struct;
20    mod quote_enum;
21    mod quote_generic_common;
22    mod quote_main_struct;
23    mod quote_method_params;
24    mod quote_template;
25    mod quote_variant;
26
27    pub use quote_choices::*;
28    pub use quote_enum::*;
29    pub use quote_generic_common::*;
30    pub use quote_main_struct::*;
31    pub use quote_method_params::*;
32    pub use quote_template::*;
33    pub use quote_variant::*;
34}
35
36mod intermediate {
37    mod quote_intermediate_data;
38
39    pub use quote_intermediate_data::*;
40}
41
42pub fn quote_all_data(
44    ctx: &RenderContext<'_>,
45    all_data: &[&DamlData<'_>],
46    render_method: &RenderMethod,
47) -> TokenStream {
48    let all_data_tokens: Vec<_> = all_data.iter().map(|&dt| quote_data(ctx, dt, render_method)).collect();
49    quote!(
50        #( #all_data_tokens )*
51    )
52}
53
54pub fn quote_data(ctx: &RenderContext<'_>, data_type: &DamlData<'_>, render_method: &RenderMethod) -> TokenStream {
55    match render_method {
56        RenderMethod::Full => match data_type {
57            DamlData::Template(template) => quote_daml_template_full(ctx, template),
58            DamlData::Record(record) => quote_daml_record_full(ctx, record),
59            DamlData::Variant(variant) => quote_daml_variant_full(ctx, variant),
60            DamlData::Enum(data_enum) => quote_daml_enum_full(ctx, data_enum),
61        },
62        RenderMethod::Intermediate => match data_type {
63            DamlData::Template(template) => quote_daml_template_intermediate(ctx, template),
64            DamlData::Record(record) => quote_daml_record_intermediate(ctx, record),
65            DamlData::Variant(variant) => quote_daml_variant_intermediate(ctx, variant),
66            DamlData::Enum(data_enum) => quote_daml_enum_intermediate(ctx, data_enum),
67        },
68    }
69}