#![cfg_attr(docsrs, feature(doc_cfg))]
pub mod audit;
pub mod autoscale_metrics;
pub mod autoscaler;
pub mod backend;
pub mod broker;
pub mod consumer;
pub mod consumer_group;
pub mod consumer_supervisor;
pub mod error;
pub mod handler;
#[doc(hidden)]
pub mod macros;
pub mod markers;
pub mod metadata;
pub mod metrics;
pub mod outcome;
pub mod publisher;
pub(crate) mod publisher_internal;
pub mod topic;
pub mod topology;
pub mod topology_declarer;
mod backends;
#[cfg(any(
feature = "rabbitmq",
feature = "nats",
feature = "kafka",
feature = "pub-aws-sns",
feature = "aws-sns-sqs",
feature = "redis-streams"
))]
pub(crate) mod retry;
pub use audit::{AuditHandler, AuditRecord, Audited};
pub use autoscale_metrics::AutoscaleMetrics;
pub use backend::{Backend, capability::HasCoordinatedGroups};
pub use consumer::{
ConsumerOptions, DEFAULT_HANDLER_TIMEOUT, DEFAULT_MAX_MESSAGE_SIZE, DEFAULT_MAX_PENDING_PER_KEY,
};
pub use consumer_supervisor::{ConsumerSupervisor, SupervisorOutcome};
pub use error::ShoveError;
pub use handler::{MessageHandler, MessageHandlerExt};
pub use metadata::{DeadMessageMetadata, MessageMetadata};
pub use outcome::Outcome;
#[cfg(any(feature = "rabbitmq", feature = "pub-aws-sns"))]
use std::time::Duration;
pub use topic::{SequencedTopic, Topic};
pub use topology::{HoldQueue, QueueTopology, SequenceConfig, SequenceFailure, TopologyBuilder};
pub use autoscaler::{
Autoscaler, AutoscalerBackend, AutoscalerConfig, ScalingDecision, ScalingMetrics,
ScalingStrategy, Stabilized, ThresholdStrategy,
};
pub use broker::Broker;
pub use consumer_group::{ConsumerGroup, ConsumerGroupConfig};
pub use publisher::Publisher;
pub use topology_declarer::{Topics, TopologyDeclarer};
#[cfg(feature = "inmemory")]
#[cfg_attr(docsrs, doc(cfg(feature = "inmemory")))]
pub use markers::InMemory;
#[cfg(feature = "kafka")]
#[cfg_attr(docsrs, doc(cfg(feature = "kafka")))]
pub use markers::Kafka;
#[cfg(feature = "nats")]
#[cfg_attr(docsrs, doc(cfg(feature = "nats")))]
pub use markers::Nats;
#[cfg(feature = "rabbitmq")]
#[cfg_attr(docsrs, doc(cfg(feature = "rabbitmq")))]
pub use markers::RabbitMq;
#[cfg(feature = "redis-streams")]
#[cfg_attr(docsrs, doc(cfg(feature = "redis-streams")))]
pub use markers::Redis;
#[cfg(feature = "aws-sns-sqs")]
#[cfg_attr(docsrs, doc(cfg(feature = "aws-sns-sqs")))]
pub use markers::Sqs;
#[cfg(feature = "audit")]
#[cfg_attr(docsrs, doc(cfg(feature = "audit")))]
pub use audit::{AuditLog, ShoveAuditHandler};
#[cfg(any(feature = "rabbitmq", feature = "pub-aws-sns"))]
pub(crate) const SHUTDOWN_GRACE: Duration = Duration::from_millis(500);
#[cfg(feature = "pub-aws-sns")]
#[cfg_attr(docsrs, doc(cfg(feature = "pub-aws-sns")))]
pub mod sns {
pub use crate::backends::sns::client::SnsConfig;
#[cfg(feature = "aws-sns-sqs")]
#[cfg_attr(docsrs, doc(cfg(feature = "aws-sns-sqs")))]
pub use crate::markers::Sqs;
pub use crate::backends::sns::{
client::SnsClient,
publisher::SnsPublisher,
topology::{SnsTopologyDeclarer, TopicRegistry},
};
#[cfg(feature = "aws-sns-sqs")]
#[cfg_attr(docsrs, doc(cfg(feature = "aws-sns-sqs")))]
pub use crate::backends::sns::{
autoscaler::SqsAutoscalerBackend,
consumer::SqsConsumer,
consumer_group::{SqsConsumerGroup, SqsConsumerGroupConfig},
registry::SqsConsumerGroupRegistry,
stats::{SqsQueueStats, SqsQueueStatsProvider, SqsQueueStatsProviderTrait},
topology::QueueRegistry,
};
}
#[cfg(feature = "nats")]
#[cfg_attr(docsrs, doc(cfg(feature = "nats")))]
pub mod nats {
pub use crate::backends::nats::NatsConfig;
pub use crate::markers::Nats;
pub use crate::backends::nats::{
JetStreamStatsProvider, NatsAutoscalerBackend, NatsClient, NatsConsumer, NatsConsumerGroup,
NatsConsumerGroupConfig, NatsConsumerGroupRegistry, NatsPublisher, NatsQueueStats,
NatsQueueStatsProvider, NatsTopologyDeclarer,
};
}
#[cfg(feature = "kafka")]
#[cfg_attr(docsrs, doc(cfg(feature = "kafka")))]
pub mod kafka {
pub use crate::backends::kafka::KafkaConfig;
pub use crate::markers::Kafka;
pub use crate::backends::kafka::{
KafkaAutoscalerBackend, KafkaClient, KafkaConsumer, KafkaConsumerGroup,
KafkaConsumerGroupConfig, KafkaConsumerGroupRegistry, KafkaLagStatsProvider,
KafkaPublisher, KafkaQueueStats, KafkaQueueStatsProvider, KafkaTopologyDeclarer,
};
#[cfg(feature = "kafka-ssl")]
#[cfg_attr(docsrs, doc(cfg(feature = "kafka-ssl")))]
pub use crate::backends::kafka::{KafkaSasl, KafkaTls};
}
#[cfg(feature = "redis-streams")]
#[cfg_attr(docsrs, doc(cfg(feature = "redis-streams")))]
pub mod redis {
pub use crate::markers::Redis;
pub use crate::backends::redis::{
RedisAutoscalerBackend, RedisClient, RedisConfig, RedisConsumer, RedisConsumerGroupConfig,
RedisConsumerGroupRegistry, RedisMode, RedisPublisher, RedisQueueStats,
RedisQueueStatsProvider, RedisTopologyDeclarer,
};
}
#[cfg(feature = "inmemory")]
#[cfg_attr(docsrs, doc(cfg(feature = "inmemory")))]
pub mod inmemory {
pub use crate::markers::InMemory;
pub use crate::backends::inmemory::{
BrokerStatsProvider, DEFAULT_QUEUE_CAPACITY, InMemoryAutoscalerBackend, InMemoryBroker,
InMemoryConfig, InMemoryConsumer, InMemoryConsumerGroup, InMemoryConsumerGroupConfig,
InMemoryConsumerGroupRegistry, InMemoryPublisher, InMemoryQueueStats,
InMemoryQueueStatsProvider, InMemoryTopologyDeclarer,
};
}
#[cfg(feature = "rabbitmq")]
#[cfg_attr(docsrs, doc(cfg(feature = "rabbitmq")))]
pub mod rabbitmq {
pub use crate::backends::rabbitmq::client::RabbitMqConfig;
pub use crate::backends::rabbitmq::management::ManagementConfig;
pub use crate::markers::RabbitMq;
pub use crate::backends::rabbitmq::{
autoscaler::RabbitMqAutoscalerBackend,
client::RabbitMqClient,
consumer::RabbitMqConsumer,
consumer_group::{ConsumerGroup, ConsumerGroupConfig},
headers::MESSAGE_ID_KEY,
management::{QueueStats, QueueStatsProvider},
publisher::RabbitMqPublisher,
registry::ConsumerGroupRegistry,
topology::RabbitMqTopologyDeclarer,
};
}