#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(not(feature = "std"))]
extern crate alloc;
pub mod classifier;
pub mod context;
pub mod decoder;
pub mod encoder;
pub mod error;
pub mod metrics;
pub mod protocol;
pub mod sync;
pub mod tls;
#[cfg(feature = "std")]
pub mod channel;
#[cfg(feature = "std")]
pub mod fleet;
#[cfg(feature = "std")]
pub mod health;
#[cfg(feature = "std")]
pub mod recovery;
#[cfg(feature = "std")]
pub mod security;
pub use classifier::{Classification, ClassificationReason, Classifier};
pub use context::Context;
pub use decoder::Decoder;
pub use encoder::Encoder;
pub use error::{AlecError, Result};
pub use metrics::{CompressionMetrics, ContextMetrics};
pub use protocol::{
ChannelInput, EncodedMessage, EncodingType, MessageHeader, MessageType, Priority, RawData,
};
pub use sync::{
SyncAnnounce, SyncConfig, SyncDiff, SyncMessage, SyncRequest, SyncState, Synchronizer,
};
pub use tls::{DtlsConfig, TlsConfig, TlsState};
#[cfg(feature = "std")]
pub use channel::Channel;
#[cfg(feature = "std")]
pub use fleet::{EmitterId, EmitterState, FleetConfig, FleetManager, FleetStats, ProcessedMessage};
#[cfg(feature = "std")]
pub use health::{HealthCheck, HealthCheckable, HealthConfig, HealthMonitor, HealthStatus};
#[cfg(feature = "std")]
pub use recovery::{
with_retry, with_retry_metrics, CircuitBreaker, CircuitConfig, CircuitState, DegradationLevel,
RetryResult, RetryStrategy,
};
#[cfg(feature = "std")]
pub use security::{
AuditEvent, AuditEventType, AuditFilter, AuditLogger, CertValidation, MemoryAuditLogger,
RateLimiter, SecurityConfig, SecurityContext, Severity,
};
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const PROTOCOL_VERSION: u8 = 1;
pub const MAX_PAYLOAD_SIZE: usize = 65535;
pub const DEFAULT_SCALE_FACTOR: u32 = 100;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_version() {
assert!(!VERSION.is_empty());
}
#[test]
fn test_basic_roundtrip() {
let mut encoder = Encoder::new();
let mut decoder = Decoder::new();
let classifier = Classifier::default();
let mut context = Context::new();
let data = RawData::new(42.0, 0);
let classification = classifier.classify(&data, &context);
let message = encoder.encode(&data, &classification, &context);
let decoded = decoder.decode(&message, &context).unwrap();
assert!((decoded.value - data.value).abs() < 0.001);
context.observe(&data);
}
}