use crate::blobs::Blob;
#[repr(C)]
pub struct ErrorLevel {
pub(crate) blob: Blob<ErrorLevel>,
}
extern "C" {
fn lib_ruby_parser__external__error_level__new_warning() -> Blob<ErrorLevel>;
fn lib_ruby_parser__external__error_level__new_error() -> Blob<ErrorLevel>;
fn lib_ruby_parser__external__error_level__drop(blob: *mut Blob<ErrorLevel>);
fn lib_ruby_parser__external__error_level__is_warning(blob: *const Blob<ErrorLevel>) -> bool;
fn lib_ruby_parser__external__error_level__is_error(blob: *const Blob<ErrorLevel>) -> bool;
}
impl Drop for ErrorLevel {
fn drop(&mut self) {
unsafe { lib_ruby_parser__external__error_level__drop(&mut self.blob) }
}
}
impl ErrorLevel {
pub fn warning() -> Self {
let blob = unsafe { lib_ruby_parser__external__error_level__new_warning() };
Self { blob }
}
pub fn error() -> Self {
let blob = unsafe { lib_ruby_parser__external__error_level__new_error() };
Self { blob }
}
pub fn is_warning(&self) -> bool {
unsafe { lib_ruby_parser__external__error_level__is_warning(&self.blob) }
}
pub fn is_error(&self) -> bool {
unsafe { lib_ruby_parser__external__error_level__is_error(&self.blob) }
}
}
impl Clone for ErrorLevel {
fn clone(&self) -> Self {
if self.is_warning() {
Self::warning()
} else if self.is_error() {
Self::error()
} else {
unreachable!("only error/warning supported")
}
}
}
impl PartialEq for ErrorLevel {
fn eq(&self, other: &Self) -> bool {
if self.is_warning() && other.is_warning() {
true
} else {
self.is_error() && other.is_error()
}
}
}
impl Eq for ErrorLevel {}