use std::ffi::NulError;
use thiserror::Error;
use crate::raw;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("string contains an interior NUL byte: {0}")]
Nul(#[from] NulError),
#[error("{0} returned a null pointer")]
Null(&'static str),
#[error("GLib error domain={} code={}: {}", .0.domain, .0.code, .0.message)]
Glib(GlibError),
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GlibError {
pub domain: u32,
pub code: i32,
pub message: String,
}
impl Error {
pub(crate) fn glib(error: *mut cogcore_sys::GError) -> Self {
Self::Glib(raw::take_gerror(error))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_mentions_null_context() {
let message = Error::Null("cog_platform_get").to_string();
assert!(message.contains("cog_platform_get"));
}
}