use crate::error::AraComError;
use crate::types::*;
use futures_core::Stream;
use std::pin::Pin;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SubscriptionState {
Idle,
Pending,
Subscribed,
Failed(String),
}
#[derive(Debug, Clone)]
pub struct EventConfig {
pub event_group_id: EventGroupId,
pub buffer_size: usize,
}
impl EventConfig {
pub fn new(event_group_id: EventGroupId) -> Self {
Self {
event_group_id,
buffer_size: 64,
}
}
}
pub type EventStream<T> = Pin<Box<dyn Stream<Item = Result<T, AraComError>> + Send>>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_event_config_new() {
let cfg = EventConfig::new(EventGroupId(0x0010));
assert_eq!(cfg.event_group_id, EventGroupId(0x0010));
assert_eq!(cfg.buffer_size, 64);
}
#[test]
fn test_subscription_state_equality() {
assert_eq!(SubscriptionState::Idle, SubscriptionState::Idle);
assert_ne!(SubscriptionState::Idle, SubscriptionState::Subscribed);
assert_eq!(
SubscriptionState::Failed("oops".into()),
SubscriptionState::Failed("oops".into())
);
}
}