#![warn(missing_docs)]
pub mod backend;
pub mod backends;
pub mod chain;
pub mod dag;
pub mod load_balancer;
pub mod locking;
pub mod metrics;
pub mod priority_queue;
pub mod queue;
pub mod registry;
pub mod result;
pub mod retry;
pub mod scheduler;
pub mod task;
pub mod webhook;
pub mod worker;
pub use backend::{
DummyBackend, ImmediateBackend, ResultStatus, TaskBackend, TaskBackends, TaskExecutionError,
TaskResultStatus,
};
#[cfg(feature = "redis-backend")]
pub use backends::RedisTaskBackend;
#[cfg(feature = "database-backend")]
pub use backends::SqliteBackend;
#[cfg(feature = "sqs-backend")]
pub use backends::{SqsBackend, SqsConfig};
#[cfg(feature = "rabbitmq-backend")]
pub use backends::{RabbitMQBackend, RabbitMQConfig};
pub use chain::{ChainStatus, TaskChain, TaskChainBuilder};
pub use dag::{TaskDAG, TaskNode, TaskNodeStatus};
pub use load_balancer::{LoadBalancer, LoadBalancingStrategy, WorkerId, WorkerInfo, WorkerMetrics};
pub use locking::{LockToken, MemoryTaskLock, TaskLock};
#[cfg(feature = "redis-backend")]
pub use locking::RedisTaskLock;
pub use metrics::{MetricsSnapshot, TaskCounts, TaskMetrics, WorkerStats};
pub use priority_queue::{Priority, PriorityTaskQueue};
pub use queue::{QueueConfig, TaskQueue};
pub use registry::{SerializedTask, TaskFactory, TaskRegistry};
pub use result::{
MemoryResultBackend, ResultBackend, TaskOutput, TaskResult as TaskResultBackend,
TaskResultMetadata,
};
#[cfg(feature = "redis-backend")]
pub use backends::redis::RedisTaskResultBackend;
#[cfg(feature = "database-backend")]
pub use backends::sqlite::SqliteResultBackend;
#[cfg(feature = "sqs-backend")]
pub use backends::sqs::SqsResultBackend;
pub use retry::{RetryState, RetryStrategy};
pub use scheduler::{CronSchedule, Schedule, Scheduler};
pub use task::{
DEFAULT_TASK_QUEUE_NAME, TASK_MAX_PRIORITY, TASK_MIN_PRIORITY, Task, TaskExecutor, TaskId,
TaskPriority, TaskStatus,
};
pub use webhook::{
HttpWebhookSender, RetryConfig, TaskStatus as WebhookTaskStatus, WebhookConfig, WebhookError,
WebhookEvent, WebhookSender, is_blocked_ip, validate_resolved_ips, validate_webhook_url,
};
pub use worker::{Worker, WorkerConfig};
use thiserror::Error;
pub type TaskResult<T> = Result<T, TaskError>;
#[derive(Debug, Error)]
pub enum TaskError {
#[error("Task execution failed: {0}")]
ExecutionFailed(String),
#[error("Task not found: {0}")]
TaskNotFound(String),
#[error("Queue error: {0}")]
QueueError(String),
#[error("Serialization error: {0}")]
SerializationError(String),
#[error("Task timeout")]
Timeout,
#[error("Max retries exceeded")]
MaxRetriesExceeded,
}