camel_language_api/
lib.rs1pub mod error;
2
3use camel_api::Value;
4use camel_api::exchange::Exchange;
5pub use error::LanguageError;
6
7pub trait Language: Send + Sync {
9 fn name(&self) -> &'static str;
10 fn create_expression(&self, script: &str) -> Result<Box<dyn Expression>, LanguageError>;
11 fn create_predicate(&self, script: &str) -> Result<Box<dyn Predicate>, LanguageError>;
12
13 fn create_mutating_expression(
15 &self,
16 _script: &str,
17 ) -> Result<Box<dyn MutatingExpression>, LanguageError> {
18 Err(LanguageError::NotSupported {
19 feature: "mutating expressions".into(),
20 language: self.name().into(),
21 })
22 }
23
24 fn create_mutating_predicate(
26 &self,
27 _script: &str,
28 ) -> Result<Box<dyn MutatingPredicate>, LanguageError> {
29 Err(LanguageError::NotSupported {
30 feature: "mutating predicates".into(),
31 language: self.name().into(),
32 })
33 }
34}
35
36pub trait Expression: Send + Sync {
38 fn evaluate(&self, exchange: &Exchange) -> Result<Value, LanguageError>;
39}
40
41pub trait MutatingExpression: Send + Sync {
44 fn evaluate(&self, exchange: &mut Exchange) -> Result<Value, LanguageError>;
45}
46
47pub trait Predicate: Send + Sync {
49 fn matches(&self, exchange: &Exchange) -> Result<bool, LanguageError>;
50}
51
52pub trait MutatingPredicate: Send + Sync {
57 fn matches(&self, exchange: &mut Exchange) -> Result<bool, LanguageError>;
58}