1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
extern crate libc;

macro_rules! ptr_not_null {
    ($x:expr) => (if $x.is_null() { panic!(concat!(stringify!($x), "is null.")) });
}
macro_rules! gen_from_ptr {
    ($pt:ty, $it:ty, $itx:expr) => (
        pub unsafe fn from_ptr(p: *mut $pt) -> $it {
            ptr_not_null!(p);
            $itx(p)
        }
    )
}

pub mod raw;
pub mod mods;

use raw as fsr;

pub type Status = Result<(), fsr::status>;
pub trait StatusImpl {
    fn to_raw(&self) -> fsr::status;
}
impl StatusImpl for Status {
    fn to_raw(&self) -> fsr::status {
        self.err().unwrap_or(fsr::status::SUCCESS)
    }
}

pub struct CoreSession(*mut fsr::core_session);
impl CoreSession {
    gen_from_ptr!(fsr::core_session, CoreSession, CoreSession);
    
}