procezor/registry_factories/
article_config.rs

1use std::sync::Arc;
2use legalios::service::period::IPeriod;
3use crate::service_types::article_code::ArticleCode;
4use crate::service_types::concept_code::ConceptCode;
5use crate::service_types::version_code::VersionCode;
6use crate::service_types::article_define::{ArticleDefine, IArticleDefine};
7use crate::registry_providers::article_provider::{ArticleSpec, ArticleSpecProvider, IArticleSpec, IArticleSpecProvider};
8use crate::service_types::article_seqs::ArticleSeqs;
9use crate::service_types::article_term::ArticleTerm;
10
11#[derive(Debug, Clone)]
12pub struct ArticleSpecConfig {
13    spec: ArticleSpec,
14}
15
16impl IArticleDefine for ArticleSpecConfig {
17    fn get_code(&self) -> ArticleCode {
18        self.spec.get_code()
19    }
20    fn get_seqs(&self) -> ArticleSeqs {
21        self.spec.get_seqs()
22    }
23    fn get_role(&self) -> ConceptCode {
24        self.spec.get_role()
25    }
26    fn get_term(&self) -> ArticleTerm {
27        self.spec.get_term()
28    }
29}
30
31impl IArticleSpec for ArticleSpecConfig {
32    fn get_sums(&self) -> Vec<ArticleCode> {
33        self.spec.get_sums()
34    }
35
36    fn get_defs(&self) -> ArticleDefine {
37        self.spec.get_defs()
38    }
39}
40
41#[allow(dead_code)]
42impl ArticleSpecConfig {
43    pub fn new(_code: i32, _seqs: i16, _role: i32, _sums: Vec<i32>) -> ArticleSpecConfig {
44        ArticleSpecConfig {
45            spec: ArticleSpec::new(ArticleCode::get(_code),
46                                   ArticleSeqs::get(_seqs),
47                                   ConceptCode::get(_role),
48                                   ArticleSpec::const_to_sums_array(_sums)),
49        }
50    }
51    fn specs_to_number_sums(_codes: Vec<ArticleCode>) -> Vec<i32> {
52        return _codes.into_iter().map(|x| x.value).collect()
53    }
54}
55
56pub struct ArticleProviderConfig {
57    spec: ArticleSpecProvider,
58    article_spec: ArticleSpecConfig,
59}
60
61#[allow(dead_code)]
62impl ArticleProviderConfig {
63    pub fn new(article: i32, sequens: i16, concept: i32, sums: Vec<i32>) -> ArticleProviderConfig {
64        ArticleProviderConfig {
65            spec: ArticleSpecProvider::new(ArticleCode::get(article)),
66            article_spec: ArticleSpecConfig::new(article, sequens, concept, sums.to_vec()),
67        }
68    }
69    fn get_spec_config(article: &ArticleCode, sequens: &ArticleSeqs, concept: &ConceptCode, sums: Vec<ArticleCode>) -> ArticleProviderConfig {
70        ArticleProviderConfig::new(article.get_value(), sequens.get_value(), concept.get_value(),
71                                   ArticleSpecConfig::specs_to_number_sums(sums))
72    }
73    fn get_const_config(article: i32, sequens: i16, concept: i32, sums: Vec<i32>) -> ArticleProviderConfig {
74        ArticleProviderConfig::new(article, sequens, concept, sums)
75    }
76}
77
78impl IArticleSpecProvider for ArticleProviderConfig {
79    fn get_code(&self) -> ArticleCode {
80        self.spec.get_code()
81    }
82
83    fn get_spec(&self, _period: &dyn IPeriod, _version: &VersionCode) -> Arc<dyn IArticleSpec> {
84        Arc::new(self.article_spec.clone())
85    }
86}
87