use std::ffi::NulError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum RpcError {
#[error("Failed to initialize RPC backend for endpoint: {endpoint}")]
InitializationFailed { endpoint: String },
#[error("Invalid endpoint format: {endpoint}")]
InvalidEndpoint { endpoint: String },
#[error("Failed to connect to RPC server at {endpoint}: {reason}")]
ConnectionFailed { endpoint: String, reason: String },
#[error("RPC server error: {message}")]
ServerError { message: String },
#[error("Failed to query device memory")]
MemoryQueryFailed,
#[error("Failed to convert C string: {0}")]
StringConversion(#[from] NulError),
#[error("Invalid UTF-8: {0}")]
Utf8Error(#[from] std::str::Utf8Error),
#[error("RPC feature not compiled in. Build with --features rpc")]
NotAvailable,
}