Skip to main content

camel_component_api/
lib.rs

1//! camel-component-api — traits and types for building Camel components.
2//!
3//! Provides the core abstractions (`Component`, `Endpoint`, `Consumer`, `Producer`)
4//! that every rust-camel component implements. Also re-exports commonly-used types
5//! from `camel-api` and `camel-endpoint` for component convenience.
6//!
7//! Main types: `Component`, `Endpoint`, `Consumer`, `ProducerContext`, `ExchangeEnvelope`, `ComponentBundle`, `PollingConsumer`.
8//! Main modules: `component`, `endpoint`, `consumer`, `producer`, `registrar`.
9
10pub mod bundle;
11pub mod component;
12pub mod component_context;
13pub mod consumer;
14pub mod endpoint;
15pub mod producer;
16pub mod registrar;
17
18pub use bundle::ComponentBundle;
19pub use component::Component;
20pub use component_context::{ComponentContext, NoOpComponentContext};
21pub use consumer::{ConcurrencyModel, Consumer, ConsumerContext, ExchangeEnvelope};
22pub use endpoint::{Endpoint, PollingConsumer};
23pub use producer::ProducerContext;
24pub use registrar::ComponentRegistrar;
25
26// Re-export camel-api types for component convenience
27pub use camel_api::{
28    Body, BodyType, BoxProcessor, CamelError, Exchange, Message, RouteAction, RouteStatus,
29    RuntimeCommand, RuntimeCommandBus, RuntimeCommandResult, RuntimeHandle, RuntimeQuery,
30    RuntimeQueryBus, RuntimeQueryResult, StreamBody, StreamMetadata, Value,
31};
32
33// Re-export camel-endpoint types for component convenience
34pub use camel_endpoint::{UriComponents, UriConfig, parse_uri};
35// Expose a `uri` sub-module so crates using `#[uri_config(crate = "camel_component_api")]`
36// can resolve `camel_component_api::uri::parse_bool_param` etc.
37pub mod uri {
38    /// Parse a boolean URI parameter value (case-insensitive).
39    /// Accepts: "true"/"1"/"yes" → true; "false"/"0"/"no" → false.
40    pub fn parse_bool_param(s: &str) -> Result<bool, String> {
41        match s.to_lowercase().as_str() {
42            "true" | "1" | "yes" => Ok(true),
43            "false" | "0" | "no" => Ok(false),
44            _ => Err(format!("invalid boolean value: '{}'", s)),
45        }
46    }
47}