framework/inner/
classification.rs1use parse::{
2 UpperName,
3};
4use parse::xml::*;
5
6use crate::pass0::{
7 Classification0,
8 ClassificationFolder0,
9 Framework0,
10};
11
12use crate::{
13 ClassificationId,
14 Error,
15};
16
17pub struct Classification {
18 pub folders: Vec<ClassificationFolder>,
19 pub has_archive: bool,
20 pub has_description: bool,
21 pub has_national: bool,
22 pub (crate) has_national_limit: Option<ClassificationId>,
23 pub (crate) has_national_set: Option<ClassificationId>,
24 pub has_not_specified: bool,
25 pub has_special: bool,
26 pub has_specific: bool,
27 pub has_state: bool,
28 pub length: usize,
29 pub name: UpperName,
30 pub zero_padded: bool,
31}
32
33pub struct ClassificationFolder {
34 pub can_select: bool,
35 pub length: usize,
36 pub name: UpperName,
37 pub run_pretty: bool,
38 pub zero_select: bool,
39}
40
41impl Classification {
42 pub (crate) fn map(
43 from: &ParsedEntry<UpperName, Classification0, ClassificationId>,
44 cx: &Framework0,
45 _errors: &mut Vec<Error>,
46 ) -> Option<Self> {
47 let classification0 = &from.value;
48
49 let folders = classification0.folders
50 .iter()
51 .map(ClassificationFolder::map)
52 .collect();
53
54 let has_national_limit = classification0.has_national_limit.as_ref().map(|name| {
55 cx.classifications.get(name)
56 .expect("Catalogue checked for existance")
57 .0
58 });
59
60 let has_national_set = classification0.has_national_set.as_ref().map(|name| {
61 cx.classifications.get(name)
62 .expect("Catalogue checked for existance")
63 .0
64 });
65
66 Some(Classification {
67 folders,
68 has_archive: classification0.has_archive,
69 has_description: classification0.has_description,
70 has_national: classification0.has_national,
71 has_national_limit,
72 has_national_set,
73 has_not_specified: classification0.has_not_specified,
74 has_special: classification0.has_special,
75 has_specific: classification0.has_specific,
76 has_state: classification0.has_state,
77 length: classification0.length,
78 name: from.name.clone(),
79 zero_padded: classification0.zero_padded,
80 })
81 }
82}
83
84impl ClassificationFolder {
85 pub (crate) fn map(folder0: &ClassificationFolder0) -> Self {
86 ClassificationFolder {
87 can_select: folder0.can_select,
88 length: folder0.length,
89 name: folder0.name.clone(),
90 run_pretty: folder0.run_pretty,
91 zero_select: folder0.zero_select,
92 }
93 }
94}