Skip to main content

camel_dsl/
contract.rs

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}