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