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