camel_language_api/
lib.rs1pub mod error;
7
8pub use camel_api::Value;
9pub use camel_api::body::Body;
10pub use camel_api::exchange::Exchange;
11pub use camel_api::message::Message;
12pub use error::LanguageError;
13
14pub trait Language: Send + Sync {
16 fn name(&self) -> &'static str;
17 fn create_expression(&self, script: &str) -> Result<Box<dyn Expression>, LanguageError>;
18 fn create_predicate(&self, script: &str) -> Result<Box<dyn Predicate>, LanguageError>;
19
20 fn create_mutating_expression(
22 &self,
23 _script: &str,
24 ) -> Result<Box<dyn MutatingExpression>, LanguageError> {
25 Err(LanguageError::NotSupported {
26 feature: "mutating expressions".into(),
27 language: self.name().into(),
28 })
29 }
30
31 fn create_mutating_predicate(
33 &self,
34 _script: &str,
35 ) -> Result<Box<dyn MutatingPredicate>, LanguageError> {
36 Err(LanguageError::NotSupported {
37 feature: "mutating predicates".into(),
38 language: self.name().into(),
39 })
40 }
41}
42
43pub trait Expression: Send + Sync {
45 fn evaluate(&self, exchange: &Exchange) -> Result<Value, LanguageError>;
46}
47
48pub trait MutatingExpression: Send + Sync {
51 fn evaluate(&self, exchange: &mut Exchange) -> Result<Value, LanguageError>;
52}
53
54pub trait Predicate: Send + Sync {
56 fn matches(&self, exchange: &Exchange) -> Result<bool, LanguageError>;
57}
58
59pub trait MutatingPredicate: Send + Sync {
64 fn matches(&self, exchange: &mut Exchange) -> Result<bool, LanguageError>;
65}