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
35
macro_rules! non_null {
    ( $obj:expr ) => {
        if let Some(obj) = $obj.as_ref() {
            obj
        } else {
            return Error::invalid_input(stringify!($expr))
                .with(crate::c::NulPtr)
                .into();
        }
    };
}

macro_rules! non_null_mut {
    ( $obj:expr ) => {
        if let Some(obj) = $obj.as_mut() {
            obj
        } else {
            return Error::invalid_input(stringify!($expr))
                .with(crate::c::NulPtr)
                .into();
        }
    };
}

macro_rules! non_null_array {
    ( $obj:expr, $len:expr) => {
        if $obj.is_null() {
            return Error::invalid_input(stringify!($expr))
                .with(crate::c::NulPtr)
                .into();
        } else {
            std::slice::from_raw_parts($obj, $len)
        }
    };
}