Files
hakorune/src/bid-converter-copilot/error.rs
Moe Charm 012fc1930f feat: Extract BID converter from Copilot and prepare plugin migration
- Extract Copilot's BID converter code to src/bid-converter-copilot/ for future use
- Create comprehensive plugin migration request document for Copilot
- Target 13 built-in boxes for plugin conversion (HTTP, GUI, Audio, etc.)
- Preserve existing nyash.toml-based plugin system
- Reorganize docs/説明書/reference/ structure for better organization
2025-08-18 20:53:48 +09:00

80 lines
2.3 KiB
Rust

/// BID-1 Standard Error Codes
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BidError {
/// Operation successful
Success = 0,
/// Buffer too small (need to call again with larger buffer)
ShortBuffer = -1,
/// Invalid type ID
InvalidType = -2,
/// Invalid method ID
InvalidMethod = -3,
/// Invalid arguments
InvalidArgs = -4,
/// Plugin internal error
PluginError = -5,
/// Memory allocation failed
OutOfMemory = -6,
/// UTF-8 encoding error
InvalidUtf8 = -7,
/// Handle not found
InvalidHandle = -8,
/// Version mismatch
VersionMismatch = -9,
}
impl BidError {
/// Convert from raw i32
pub fn from_raw(code: i32) -> Self {
match code {
0 => BidError::Success,
-1 => BidError::ShortBuffer,
-2 => BidError::InvalidType,
-3 => BidError::InvalidMethod,
-4 => BidError::InvalidArgs,
-5 => BidError::PluginError,
-6 => BidError::OutOfMemory,
-7 => BidError::InvalidUtf8,
-8 => BidError::InvalidHandle,
-9 => BidError::VersionMismatch,
_ => BidError::PluginError, // Unknown errors map to plugin error
}
}
/// Get human-readable error message
pub fn message(&self) -> &'static str {
match self {
BidError::Success => "Operation successful",
BidError::ShortBuffer => "Buffer too small, call again with larger buffer",
BidError::InvalidType => "Invalid type ID",
BidError::InvalidMethod => "Invalid method ID",
BidError::InvalidArgs => "Invalid arguments",
BidError::PluginError => "Plugin internal error",
BidError::OutOfMemory => "Memory allocation failed",
BidError::InvalidUtf8 => "Invalid UTF-8 encoding",
BidError::InvalidHandle => "Handle not found",
BidError::VersionMismatch => "BID version mismatch",
}
}
}
impl std::fmt::Display for BidError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{} (code: {})", self.message(), *self as i32)
}
}
impl std::error::Error for BidError {}
/// Result type for BID operations
pub type BidResult<T> = Result<T, BidError>;