Skip to main content

camel_bridge/
spec.rs

1/// Static descriptor for a bridge binary (JMS, XML, or future bridges).
2/// All fields are `&'static str` so constants can be declared at compile time.
3#[derive(Debug, Clone, Copy)]
4pub struct BridgeSpec {
5    /// Human-readable name used in log messages and error strings.
6    pub name: &'static str,
7    /// Environment variable that overrides the binary path (e.g. `CAMEL_JMS_BRIDGE_BINARY_PATH`).
8    pub env_binary_path: &'static str,
9    /// Environment variable that overrides the GitHub Releases base URL.
10    pub env_release_url: &'static str,
11    /// Sub-directory under the shared rust-camel cache root (e.g. `"jms-bridge"`).
12    pub cache_subdir: &'static str,
13    /// Prefix used in GitHub release tag names (e.g. `"jms-bridge-v"`).
14    pub release_tag_prefix: &'static str,
15    /// Default version string used when no version is specified by the caller.
16    pub default_version: &'static str,
17    /// Template for the stderr log file name; `{pid}` is replaced at runtime.
18    /// Example: `"jms-bridge-{pid}.log"`
19    pub log_file_template: &'static str,
20    /// Whether pre-built binaries are available for macOS.
21    /// JMS bridge: false (requires Docker build). XML bridge: true (GraalVM native-image).
22    pub macos_supported: bool,
23}
24
25/// Spec for the JMS bridge (`bridges/jms`).
26pub const JMS_BRIDGE: BridgeSpec = BridgeSpec {
27    name: "jms-bridge",
28    env_binary_path: "CAMEL_JMS_BRIDGE_BINARY_PATH",
29    env_release_url: "CAMEL_JMS_BRIDGE_RELEASE_URL",
30    cache_subdir: "jms-bridge",
31    release_tag_prefix: "jms-bridge-v",
32    default_version: env!("CARGO_PKG_VERSION"),
33    log_file_template: "jms-bridge-{pid}.log",
34    macos_supported: false,
35};
36
37/// Spec for the XML bridge (`bridges/xml`).
38pub const XML_BRIDGE: BridgeSpec = BridgeSpec {
39    name: "xml-bridge",
40    env_binary_path: "CAMEL_XML_BRIDGE_BINARY_PATH",
41    env_release_url: "CAMEL_XML_BRIDGE_RELEASE_URL",
42    cache_subdir: "xml-bridge",
43    release_tag_prefix: "xml-bridge-v",
44    default_version: env!("CARGO_PKG_VERSION"),
45    log_file_template: "xml-bridge-{pid}.log",
46    macos_supported: true,
47};
48
49/// Spec for the CXF bridge (`bridges/cxf`).
50pub const CXF_BRIDGE: BridgeSpec = BridgeSpec {
51    name: "cxf-bridge",
52    env_binary_path: "CAMEL_CXF_BRIDGE_BINARY_PATH",
53    env_release_url: "CAMEL_CXF_BRIDGE_RELEASE_URL",
54    cache_subdir: "cxf-bridge",
55    release_tag_prefix: "cxf-bridge-v",
56    default_version: env!("CARGO_PKG_VERSION"),
57    log_file_template: "cxf-bridge-{pid}.log",
58    macos_supported: false,
59};