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}