rustyfix_dictionary/
builder.rs1use crate::{Dictionary, FixDatatype, FixmlComponentAttributes};
4use smartstring::alias::String as SmartString;
5
6pub struct DictionaryBuilder {
18 dict: Dictionary,
19}
20
21impl DictionaryBuilder {
23 pub fn new(dict: Dictionary) -> Self {
24 DictionaryBuilder { dict }
25 }
26
27 pub fn dict(&self) -> &Dictionary {
29 &self.dict
30 }
31
32 pub fn build(self) -> Dictionary {
34 self.dict
35 }
36
37 pub fn add_field(&mut self, field: FieldData) {
38 self.dict
39 .field_tags_by_name
40 .insert(field.name.clone(), field.tag);
41 self.dict.fields_by_tags.insert(field.tag, field);
42 }
43
44 pub fn add_message(&mut self, message: MessageData) {
45 self.dict
46 .message_msgtypes_by_name
47 .insert(message.name.clone(), message.msg_type.clone());
48 self.dict
49 .messages_by_msgtype
50 .insert(message.msg_type.clone(), message);
51 }
52
53 pub fn add_component(&mut self, component: ComponentData) {
54 self.dict
55 .components_by_name
56 .insert(component.name.clone(), component);
57 }
58
59 pub fn add_datatype(&mut self, datatype: DatatypeData) {
60 self.dict
61 .data_types_by_name
62 .insert(datatype.datatype.name().into(), datatype);
63 }
64
65 pub fn add_category(&mut self, category: CategoryData) {
66 self.dict
67 .categories_by_name
68 .insert(category.name.clone().into(), category);
69 }
70}
71
72#[derive(Clone, Debug)]
75pub struct FieldData {
76 pub name: SmartString,
78 pub tag: u32,
81 pub data_type_name: SmartString,
83 pub associated_data_tag: Option<usize>,
86 pub value_restrictions: Option<Vec<FieldEnumData>>,
87 pub abbr_name: Option<String>,
91 pub base_category_id: Option<usize>,
93 pub base_category_abbr_name: Option<String>,
96 pub required: bool,
98 pub description: Option<String>,
99}
100
101#[derive(Clone, Debug)]
102pub struct CategoryData {
103 pub name: String,
105 pub fixml_filename: String,
107}
108
109#[derive(Clone, Debug, PartialEq)]
110pub struct DatatypeData {
111 pub datatype: FixDatatype,
113 pub description: String,
115 pub examples: Vec<String>,
117 }
119
120#[derive(Clone, Debug)]
121pub struct AbbreviationData {
122 pub abbreviation: SmartString,
123 pub is_last: bool,
124}
125
126#[derive(Clone, Debug)]
127pub struct ComponentData {
128 pub id: usize,
131 pub component_type: FixmlComponentAttributes,
132 pub layout_items: Vec<LayoutItemData>,
133 pub category_name: SmartString,
134 pub name: SmartString,
136 pub abbr_name: Option<SmartString>,
138}
139
140#[derive(Clone, Debug)]
141#[allow(dead_code)]
142pub enum LayoutItemKindData {
143 Component {
144 name: SmartString,
145 },
146 Group {
147 len_field_tag: u32,
148 items: Vec<LayoutItemData>,
149 },
150 Field {
151 tag: u32,
152 },
153}
154
155#[derive(Clone, Debug)]
156pub struct LayoutItemData {
157 pub required: bool,
158 pub kind: LayoutItemKindData,
159}
160
161#[derive(Clone, Debug)]
162pub struct MessageData {
163 pub component_id: u32,
165 pub msg_type: SmartString,
168 pub name: SmartString,
170 pub category_name: SmartString,
172 pub section_id: String,
174 pub layout_items: Vec<LayoutItemData>,
175 pub abbr_name: Option<SmartString>,
177 pub required: bool,
180 pub description: String,
181 pub elaboration: Option<String>,
182}
183
184#[derive(Clone, Debug)]
185pub struct FieldEnumData {
186 pub value: String,
187 pub description: String,
188}