framework/inner/
classification.rs

1use 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}