1 module bamboo.codegen.field_declarations;
2 
3 public import bamboo.codegen;
4 public import bamboo.codegen.field_declarations.atomic;
5 public import bamboo.codegen.field_declarations.molecular;
6 public import bamboo.codegen.field_declarations.parameter;
7 
8 string generateField(FieldDeclaration field, bool generateStubs)
9 {
10     string format;
11     if (auto molecular = cast(MolecularField) field)
12     {
13         format ~= generateMolecular(molecular);
14     }
15     else if (auto atomic = cast(AtomicField) field)
16     {
17         format ~= generateAtomic(atomic, generateStubs);
18     }
19     else if (auto parameter = cast(ParameterField) field)
20     {
21         format ~= generateParameterField(parameter, generateStubs);
22     }
23     else
24     {
25         assert(0);
26     }
27     return format;
28 }
29 
30 string generateParameterListFor(FieldDeclaration field)
31 {
32     if (auto molecular = cast(MolecularField) field)
33     {
34         string format;
35         foreach (reference; molecular.references)
36         {
37             format ~= generateParameterListFor(reference);
38         }
39         return format;
40     }
41     else if (auto atomic = cast(AtomicField) field)
42     {
43         return generateParameterList(atomic.parameters);
44     }
45     else if (auto parameter = cast(ParameterField) field)
46     {
47         return generateParameterList([parameter.parameter]);
48     }
49     return "";
50 }
51 
52 string generateParameterList(Parameter[] parameters)
53 {
54     string format;
55 
56     foreach (parameter; parameters)
57     {
58         format ~= generateDefinition(parameter) ~ ",";
59     }
60 
61     return format;
62 }
63