hyperi_rustlib/transport/mod.rs
1// Project: hyperi-rustlib
2// File: src/transport/mod.rs
3// Purpose: Transport abstraction layer for message delivery
4// Language: Rust
5//
6// License: BUSL-1.1
7// Copyright: (c) 2026 HYPERI PTY LIMITED
8
9//! # Transport Abstraction Layer
10//!
11//! Pluggable message transport with split sender/receiver traits for
12//! type-safe factory construction and runtime transport selection.
13//!
14//! ## Architecture
15//!
16//! ```text
17//! TransportSender (object-safe) TransportReceiver<Token> (generic)
18//! send(key, payload) recv(max) -> Vec<Message<Token>>
19//! close() commit(tokens)
20//! is_healthy() close()
21//! name() is_healthy(), name()
22//! | |
23//! +-------- Transport (blanket) -------+
24//! ```
25//!
26//! - **Output stages** (DLQ, forwarding, archiving): use `Box<dyn TransportSender>`
27//! - **Input stages** (receiver, fetcher): use concrete `impl TransportReceiver`
28//! - **Factory**: `sender_from_config()` returns `Box<dyn TransportSender>`
29//!
30//! ## Transport Selection
31//!
32//! | Transport | Send | Recv | Use Case |
33//! |-----------|------|------|----------|
34//! | **Kafka** | Yes | Yes | Production default, PB/day, persistence |
35//! | **gRPC** | Yes | Yes | Low-latency direct, DFE mesh |
36//! | **Memory** | Yes | Yes | Unit tests, same-process |
37//! | **File** | Yes | Yes | Debugging, audit trails, replay |
38//! | **Pipe** | Yes | Yes | Unix pipelines, sidecar pattern |
39//! | **HTTP** | Yes | Yes | Webhook delivery, REST ingest |
40//! | **Redis** | Yes | Yes | Edge deployments, lightweight pub/sub |
41//!
42//! ## Example
43//!
44//! ```rust,ignore
45//! use hyperi_rustlib::transport::{TransportSender, TransportConfig};
46//!
47//! // Factory creates the right backend from config
48//! let sender: Box<dyn TransportSender> = transport::sender_from_config("transport.output").await?;
49//! sender.send("events.land", payload).await;
50//! ```
51
52mod detect;
53mod error;
54pub mod factory;
55pub mod filter;
56mod payload;
57pub mod propagation;
58mod traits;
59mod types;
60
61// Re-export payload utilities
62pub use payload::{
63 PayloadValue, extract_field, extract_nested_field, parse_payload, parse_payload_typed,
64 parse_payload_with_format, serialize_json, serialize_msgpack, serialize_payload,
65};
66pub use types::PayloadFormat;
67
68// Re-export stateful format detection
69pub use detect::{DetectedFormat, FormatDetector, FormatMode, detect_format};
70
71#[cfg(feature = "transport-kafka")]
72pub mod kafka;
73
74#[cfg(feature = "transport-grpc")]
75pub mod grpc;
76
77#[cfg(feature = "transport-grpc-vector-compat")]
78pub mod vector_compat;
79
80#[cfg(feature = "transport-memory")]
81pub mod memory;
82
83#[cfg(feature = "transport-pipe")]
84pub mod pipe;
85
86#[cfg(feature = "transport-file")]
87pub mod file;
88
89#[cfg(feature = "transport-http")]
90pub mod http;
91
92#[cfg(feature = "transport-redis")]
93pub mod redis_transport;
94
95pub mod routed;
96
97// Re-exports -- traits and factory
98pub use error::{TransportError, TransportResult};
99pub use factory::AnySender;
100pub use routed::RoutedSender;
101pub use traits::{
102 CommitToken, FromCascade, RecvBatch, Transport, TransportBase, TransportReceiver,
103 TransportSender,
104};
105pub use types::{Message, SendResult, TransportConfig, TransportType};
106
107#[cfg(feature = "transport-kafka")]
108pub use kafka::{KafkaConfig, KafkaToken, KafkaTransport};
109
110#[cfg(feature = "transport-grpc")]
111pub use grpc::{GrpcConfig, GrpcToken, GrpcTransport};
112
113#[cfg(feature = "transport-grpc-vector-compat")]
114pub use vector_compat::{VectorCompatClient, VectorCompatService};
115
116#[cfg(feature = "transport-memory")]
117pub use memory::{MemoryConfig, MemoryToken, MemoryTransport};
118
119#[cfg(feature = "transport-pipe")]
120pub use pipe::{PipeToken, PipeTransport, PipeTransportConfig};
121
122#[cfg(feature = "transport-file")]
123pub use file::{FileToken, FileTransport, FileTransportConfig};
124
125#[cfg(feature = "transport-http")]
126pub use http::{HttpToken, HttpTransport, HttpTransportConfig};
127
128#[cfg(feature = "transport-redis")]
129pub use redis_transport::{RedisToken, RedisTransport, RedisTransportConfig};