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}