use std::ops::Range;
use ffi_convert::{AsRust, AsRustError, CDrop, CDropError, CReprOf, CReprOfError};
#[repr(C)]
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct CRange<T> {
pub start: T,
pub end: T,
}
impl<U: AsRust<V>, V: PartialOrd + PartialEq> AsRust<Range<V>> for CRange<U> {
fn as_rust(&self) -> Result<Range<V>, AsRustError> {
Ok(Range {
start: self.start.as_rust()?,
end: self.end.as_rust()?,
})
}
}
impl<U: CReprOf<V> + CDrop, V: PartialOrd + PartialEq> CReprOf<Range<V>> for CRange<U> {
fn c_repr_of(input: Range<V>) -> Result<Self, CReprOfError> {
Ok(Self {
start: U::c_repr_of(input.start)?,
end: U::c_repr_of(input.end)?,
})
}
}
impl<T> CDrop for CRange<T> {
fn do_drop(&mut self) -> Result<(), CDropError> {
Ok(())
}
}
impl<T> Drop for CRange<T> {
fn drop(&mut self) {
let _ = self.do_drop();
}
}