use std::io;
use std::time::Duration;
use thiserror::Error;
#[doc = include_str!("docs/daemon_error.md")]
#[derive(Debug, Error)]
pub enum DaemonError {
#[error("IO error: {0}")]
Io(#[from] io::Error),
#[error("Failed to bind to socket: {0}")]
BindFailed(#[source] io::Error),
#[error("Failed to spawn LSP: {0}")]
LspSpawnFailed(String),
#[error("Language server failed to complete initialization (it exited or rejected `initialize`)")]
LspInitializeFailed,
#[error("Language server did not answer `initialize` within {}s", .0.as_secs())]
LspInitializeTimedOut(Duration),
#[error("Lockfile error: {0}")]
LockfileError(#[source] io::Error),
}
pub type DaemonResult<T> = std::result::Result<T, DaemonError>;