dsntk_model/
mapper.rs

1use crate::{
2  AnnotationEntry, BuiltinAggregator, DecisionRule, DecisionTable, DecisionTableOrientation, DmnId, HitPolicy, InputClause, InputEntry, OutputClause, OutputEntry,
3  RuleAnnotationClause,
4};
5use dsntk_common::gen_id;
6use dsntk_recognizer::{
7  AnnotationEntry as RecognizedAnnotationEntry, BuiltinAggregator as RecognizedBuiltinAggregator, DecisionRule as RecognizedDecisionRule, DecisionTable as RecognizedDecisionTable,
8  DecisionTableOrientation as RecognizedDecisionTableOrientation, HitPolicy as RecognizedHitPolicy, InputClause as RecognizedInputClause, InputEntry as RecognizedInputEntry,
9  OutputClause as RecognizedOutputClause, OutputEntry as RecognizedOutputEntry, RuleAnnotationClause as RecognizedRuleAnnotationClause,
10};
11
12impl From<RecognizedDecisionTable> for DecisionTable {
13  fn from(value: RecognizedDecisionTable) -> Self {
14    let RecognizedDecisionTable {
15      information_item_name,
16      mut input_clauses,
17      mut output_clauses,
18      rule_annotations: mut annotations,
19      mut rules,
20      hit_policy,
21      aggregation,
22      preferred_orientation: orientation,
23      output_label,
24    } = value;
25    Self {
26      information_item_name,
27      input_clauses: input_clauses.drain(..).map(Into::into).collect(),
28      output_clauses: output_clauses.drain(..).map(Into::into).collect(),
29      annotations: annotations.drain(..).map(Into::into).collect(),
30      rules: rules.drain(..).map(Into::into).collect(),
31      hit_policy: hit_policy.into(),
32      aggregation: aggregation.map(Into::into),
33      preferred_orientation: orientation.into(),
34      output_label,
35      namespace: "".to_string(),
36      model_name: "".to_string(),
37      id: DmnId::Generated(gen_id()),
38      description: None,
39      label: None,
40      extension_elements: vec![],
41      extension_attributes: vec![],
42      type_ref: None,
43    }
44  }
45}
46
47impl From<RecognizedInputClause> for InputClause {
48  fn from(value: RecognizedInputClause) -> Self {
49    Self {
50      input_expression: value.input_expression,
51      allowed_input_values: value.allowed_input_values,
52    }
53  }
54}
55
56impl From<RecognizedOutputClause> for OutputClause {
57  fn from(value: RecognizedOutputClause) -> Self {
58    Self {
59      type_ref: None,
60      name: value.name,
61      allowed_output_values: value.allowed_output_values,
62      default_output_entry: value.default_output_entry,
63    }
64  }
65}
66
67impl From<RecognizedRuleAnnotationClause> for RuleAnnotationClause {
68  fn from(value: RecognizedRuleAnnotationClause) -> Self {
69    Self { name: value.name.to_string() }
70  }
71}
72
73impl From<RecognizedDecisionRule> for DecisionRule {
74  fn from(value: RecognizedDecisionRule) -> Self {
75    let RecognizedDecisionRule {
76      mut input_entries,
77      mut output_entries,
78      mut annotation_entries,
79    } = value;
80    Self {
81      input_entries: input_entries.drain(..).map(Into::into).collect(),
82      output_entries: output_entries.drain(..).map(Into::into).collect(),
83      annotation_entries: annotation_entries.drain(..).map(Into::into).collect(),
84    }
85  }
86}
87
88impl From<RecognizedInputEntry> for InputEntry {
89  fn from(value: RecognizedInputEntry) -> Self {
90    Self { text: value.text }
91  }
92}
93
94impl From<RecognizedOutputEntry> for OutputEntry {
95  fn from(value: RecognizedOutputEntry) -> Self {
96    Self { text: value.text }
97  }
98}
99
100impl From<RecognizedAnnotationEntry> for AnnotationEntry {
101  fn from(value: RecognizedAnnotationEntry) -> Self {
102    Self { text: value.text }
103  }
104}
105
106impl From<RecognizedHitPolicy> for HitPolicy {
107  fn from(value: RecognizedHitPolicy) -> Self {
108    match value {
109      RecognizedHitPolicy::Unique => Self::Unique,
110      RecognizedHitPolicy::Any => Self::Any,
111      RecognizedHitPolicy::Priority => Self::Priority,
112      RecognizedHitPolicy::First => Self::First,
113      RecognizedHitPolicy::Collect(aggregator) => Self::Collect(aggregator.into()),
114      RecognizedHitPolicy::OutputOrder => Self::OutputOrder,
115      RecognizedHitPolicy::RuleOrder => Self::RuleOrder,
116    }
117  }
118}
119
120impl From<RecognizedBuiltinAggregator> for BuiltinAggregator {
121  fn from(value: RecognizedBuiltinAggregator) -> Self {
122    match value {
123      RecognizedBuiltinAggregator::List => Self::List,
124      RecognizedBuiltinAggregator::Count => Self::Count,
125      RecognizedBuiltinAggregator::Sum => Self::Sum,
126      RecognizedBuiltinAggregator::Min => Self::Min,
127      RecognizedBuiltinAggregator::Max => Self::Max,
128    }
129  }
130}
131
132impl From<RecognizedDecisionTableOrientation> for DecisionTableOrientation {
133  fn from(value: RecognizedDecisionTableOrientation) -> Self {
134    match value {
135      RecognizedDecisionTableOrientation::RuleAsRow => Self::RuleAsRow,
136      RecognizedDecisionTableOrientation::RuleAsColumn => Self::RuleAsColumn,
137      RecognizedDecisionTableOrientation::CrossTable => Self::CrossTable,
138    }
139  }
140}