pub mod client;
pub mod proto;
pub mod server;
mod frame;
use thiserror::Error;
pub use client::{DcpClient, EventSubscription, MetricSubscription};
pub use proto::{
Auth, ClientKind, DCP_PROTOCOL_MAJOR, DCP_PROTOCOL_VERSION, DrainJob, GetConfig, Hello,
JobStatusRequest, ListJobs, PutConfig, Request, Response, ResponseStatus, RestartJob, StartJob,
StopJob, SubscribeEvents, SubscribeMetrics,
};
pub use server::{
DcpJobFactories, DcpQuicServerConfig, DcpServer, DcpServerConfig, DcpServerHandle,
DcpTcpServerConfig,
};
pub type DcpResult<T> = Result<T, DcpError>;
#[derive(Debug, Error)]
pub enum DcpError {
#[error("DCP connection closed")]
Closed,
#[error("DCP protocol error: {0}")]
Protocol(String),
#[error("DCP response {status:?}: {message}")]
Response {
status: ResponseStatus,
message: String,
},
#[error("DCP IO error: {0}")]
Io(#[from] std::io::Error),
#[error("DCP encode error: {0}")]
Encode(#[from] prost::EncodeError),
#[error("DCP decode error: {0}")]
Decode(#[from] prost::DecodeError),
#[error("DCP agent error: {0}")]
Agent(#[from] crate::AgentError),
#[error("DCP stream error: {0}")]
Stream(#[from] datum::StreamError),
#[error("DCP task failed: {0}")]
Join(#[from] tokio::task::JoinError),
}
impl DcpError {
pub(crate) fn response(status: ResponseStatus, message: impl Into<String>) -> Self {
Self::Response {
status,
message: message.into(),
}
}
}