use crate::client::UploaderMessage;
use async_channel::TrySendError;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("Serialization error: {0}")]
Serialization(#[from] serde_json::Error),
#[error("Shared library error: {0}")]
Shared(#[from] observation_tools_shared::Error),
#[error("Failed to send observation: channel closed")]
ChannelClosed,
#[error("No execution context available")]
NoExecutionContext,
#[error("Configuration error: {0}")]
Config(String),
#[error("Observation must have a payload. Use .payload() or .text_payload() to set one.")]
MissingPayload,
#[error("Failed to send uploader message: {0}")]
TrySendError(String),
#[error("Upload failed: {0}")]
UploadFailed(String),
#[error("Creation error")]
CreationError,
}
impl From<TrySendError<UploaderMessage>> for Error {
fn from(err: TrySendError<UploaderMessage>) -> Self {
Error::TrySendError(err.to_string())
}
}
impl From<Error> for napi::Error {
fn from(err: Error) -> Self {
napi::Error::from_reason(err.to_string())
}
}