procezor/registry_factories/
article_config.rs1use 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