oca_bundle_semantics/controller.rs
1use std::io::Read;
2
3use crate::state::oca::OCABundle;
4
5pub type GenericError = Box<dyn std::error::Error + Sync + Send>;
6pub type GenericResult<T> = Result<T, GenericError>;
7
8pub fn load_oca(source: &mut dyn Read) -> GenericResult<OCABundle> {
9 let oca: OCABundle = serde_json::from_reader(source)?;
10
11 Ok(oca)
12}
13/*
14#[cfg(test)]
15mod tests {
16 use super::load_oca;
17 use crate::state::{attribute::{AttributeType, Attribute}, oca::overlay::label::Labels};
18 use maplit::hashmap;
19
20 #[test]
21 fn loads_json_from_str() {
22 let data = r#"
23{
24 "capture_base": {
25 "attributes": {
26 "n1": "Text",
27 "n2": "DateTime",
28 "n3": "Reference:sai"
29 },
30 "classification": "",
31 "digest": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
32 "flagged_attributes": [
33 "n1"
34 ],
35 "type": "spec/capture_base/1.0"
36 },
37 "overlays": [
38 {
39 "attribute_character_encoding": {
40 "n2": "iso-8859-1"
41 },
42 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
43 "default_character_encoding": "utf-8",
44 "digest": "E-fCW5Gcnzn4uTBIUUH4Gdl3xRdlDg25cM3UCk3blubU",
45 "type": "spec/overlays/character_encoding/1.0"
46 },
47 {
48 "attribute_units": {
49 "n1": "cm"
50 },
51 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
52 "digest": "E-gA3mYg2RbZcLXuNrWyMNJqCaclfzMrgQogVUlpFcoY",
53 "metric_system": "SI",
54 "type": "spec/overlays/unit/1.0"
55 },
56 {
57 "attribute_entry_codes": {
58 "n1": [
59 "op1",
60 "op2"
61 ]
62 },
63 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
64 "digest": "E4L-BukSBsqZoDDIJvw4_gGjAJs5It4UUfiA200lGup0",
65 "type": "spec/overlays/entry_code/1.0"
66 },
67 {
68 "attribute_categories": [],
69 "attribute_labels": {
70 "n1": "Name: ",
71 "n2": "Date: ",
72 "n3": "Reference: "
73 },
74 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
75 "category_labels": {},
76 "digest": "EwXoTd4_ZSZMnRmfQGFkXTfw7uMu9z9bnIah2ZM6hPpQ",
77 "language": "En",
78 "type": "spec/overlays/label/1.0"
79 },
80 {
81 "attribute_information": {
82 "n1": "info en"
83 },
84 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
85 "digest": "EUcv8Udxqj7pZfHF1XxrIpb01lfRhpRtWdzxVS706EVI",
86 "language": "En",
87 "type": "spec/overlays/information/1.0"
88 },
89 {
90 "attribute_entries": {
91 "n1": {
92 "op1": "Option 1",
93 "op2": "Option 2"
94 }
95 },
96 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
97 "digest": "EcNtZGAs1yPlPSVRO38t13sxr1abF67MnqvjTJQGM3jc",
98 "language": "En",
99 "type": "spec/overlays/entry/1.0"
100 },
101 {
102 "attribute_categories": [],
103 "attribute_labels": {
104 "n1": "ImiÄ™: ",
105 "n2": "Data: ",
106 "n3": "Referecja: "
107 },
108 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
109 "category_labels": {},
110 "digest": "Eme3tfHtbrY0nT8ZNEorzM2Nrkdf3PzwFIP1hnAmXkdg",
111 "language": "Pl",
112 "type": "spec/overlays/label/1.0"
113 },
114 {
115 "attribute_information": {
116 "n1": "info pl"
117 },
118 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
119 "digest": "EZvWNCh1yj7FSOdyz67WK1n7pq_xyo-M7RjDiFDR4Q7I",
120 "language": "Pl",
121 "type": "spec/overlays/information/1.0"
122 },
123 {
124 "attribute_entries": {
125 "n1": {
126 "op1": "Opcja 1",
127 "op2": "Opcja 2"
128 }
129 },
130 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
131 "digest": "EBXzK5l6KiH40PyJSoDjB4WBMpXh6DwvgpLMbZ2jj-Ws",
132 "language": "Pl",
133 "type": "spec/overlays/entry/1.0"
134 },
135 {
136 "attribute_conditions": {
137 "n2": "${0} == 'op1'"
138 },
139 "attribute_dependencies": {
140 "n2": [
141 "n1"
142 ]
143 },
144 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
145 "digest": "EkyIEvDwMete4Y-adBJZcGihh6K2Orswhkv_unFmXzHM",
146 "type": "spec/overlays/conditional/1.0"
147 },
148 {
149 "attribute_formats": {
150 "n2": "DD/MM/YYYY"
151 },
152 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
153 "digest": "EGiJKfiFCIf8Hdt8QLlnksOB9AH6_gcuc0l3gx0aATnM",
154 "type": "spec/overlays/format/1.0"
155 },
156 {
157 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
158 "description": "DL desc",
159 "digest": "Eluyyqh9h7TQWJt980o16ZfHSqSKQD2q0q7QtTUiIBPc",
160 "language": "En",
161 "name": "Driving Licence",
162 "type": "spec/overlays/meta/1.0"
163 },
164 {
165 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
166 "description": "PJ desc",
167 "digest": "EfDTiIz_5kHXWQIxw8JmDEou__3pi94c63cMrIRo7nK4",
168 "language": "Pl",
169 "name": "Prawo Jazdy",
170 "type": "spec/overlays/meta/1.0"
171 },
172 {
173 "capture_base": "ElNWOR0fQbv_J6EL0pJlvCxEpbu4bg1AurHgr_0A7LKc",
174 "digest": "EfDTiIz_5kHXWQIxw8JmDEou__3pi94c63cMrIRo7nK4",
175 "type": "spec/overlays/standard/1.0",
176 "attribute_standards": {
177 "n1": "urn:ietf:id:123",
178 "n2": "urn:iso:std:iso:9999:-1:ed-1:v2:en"
179 }
180 }
181 ]
182}
183 "#;
184
185 let oca_builder_result = load_oca(&mut data.as_bytes());
186 assert!(oca_builder_result.is_ok());
187 if let Ok(oca_builder) = oca_builder_result {
188 let oca = oca_builder
189 .add_attribute(
190 cascade! {
191 Attribute::new("new_attr".to_string());
192 ..add_attribute_label("En".to_string(), "New:".to_string());
193 ..add_attribute_label("Pl".to_string(), "Nowy:".to_string());
194 }
195 )
196 .finalize();
197
198 assert_eq!(oca.capture_base.attributes.len(), 4);
199 }
200 }
201}
202 */