1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
2pub enum DeclarativeStepKind {
3 To,
4 Log,
5 SetHeader,
6 SetBody,
7 Filter,
8 Choice,
9 Split,
10 Aggregate,
11 WireTap,
12 Multicast,
13 Stop,
14 Script,
15 ConvertBodyTo,
16 Process,
17 ProcessFn,
18 MapBody,
19 SetBodyFn,
20 SetHeaderFn,
21}
22
23pub const MANDATORY_DECLARATIVE_STEP_KINDS: [DeclarativeStepKind; 13] = [
24 DeclarativeStepKind::To,
25 DeclarativeStepKind::Log,
26 DeclarativeStepKind::SetHeader,
27 DeclarativeStepKind::SetBody,
28 DeclarativeStepKind::Filter,
29 DeclarativeStepKind::Choice,
30 DeclarativeStepKind::Split,
31 DeclarativeStepKind::Aggregate,
32 DeclarativeStepKind::WireTap,
33 DeclarativeStepKind::Multicast,
34 DeclarativeStepKind::Stop,
35 DeclarativeStepKind::Script,
36 DeclarativeStepKind::ConvertBodyTo,
37];
38
39pub fn is_rust_only_kind(kind: DeclarativeStepKind) -> bool {
40 matches!(
41 kind,
42 DeclarativeStepKind::Process
43 | DeclarativeStepKind::ProcessFn
44 | DeclarativeStepKind::MapBody
45 | DeclarativeStepKind::SetBodyFn
46 | DeclarativeStepKind::SetHeaderFn
47 )
48}
49
50pub fn mandatory_declarative_step_kinds() -> &'static [DeclarativeStepKind] {
51 &MANDATORY_DECLARATIVE_STEP_KINDS
52}
53
54pub const fn assert_contract_coverage(implemented: &[DeclarativeStepKind]) {
55 let mut i = 0;
56 while i < MANDATORY_DECLARATIVE_STEP_KINDS.len() {
57 let required = MANDATORY_DECLARATIVE_STEP_KINDS[i];
58 let mut found = false;
59
60 let mut j = 0;
61 while j < implemented.len() {
62 if implemented[j] as u8 == required as u8 {
63 found = true;
64 break;
65 }
66 j += 1;
67 }
68
69 if !found {
70 panic!("DSL is missing mandatory declarative step");
71 }
72 i += 1;
73 }
74}