use std::io;
use std::path::PathBuf;
#[derive(Debug, thiserror::Error)]
pub enum HeartbeatError {
#[error("inbox read error: {0}")]
InboxRead(#[source] io::Error),
#[error("offset file corrupt at {path}: expected numeric offset, got {content:?}")]
OffsetCorrupt { path: PathBuf, content: String },
#[error("offset file read error at {path}: {source}")]
OffsetRead {
path: PathBuf,
#[source]
source: io::Error,
},
#[error("offset file write error at {path}: {source}")]
OffsetWrite {
path: PathBuf,
#[source]
source: io::Error,
},
#[error(".in-flight corrupt at {path}: {source}")]
InFlightCorrupt {
path: PathBuf,
#[source]
source: serde_json::Error,
},
#[error(".in-flight read error at {path}: {source}")]
InFlightRead {
path: PathBuf,
#[source]
source: io::Error,
},
#[error(".in-flight write error at {path}: {source}")]
InFlightWrite {
path: PathBuf,
#[source]
source: io::Error,
},
#[error(
"inconsistent state: .responded present without .in-flight at {io_dir}; \
run `heartbeat-stop recover`"
)]
InconsistentState { io_dir: PathBuf },
#[error("dead-letter write error at {path}: {source}")]
DeadLetterWrite {
path: PathBuf,
#[source]
source: io::Error,
},
}
pub type Result<T> = std::result::Result<T, HeartbeatError>;