1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#[derive(Deserialize)]
pub struct Reason<T> {
    pub kind: String,
    pub details: T,
}

impl<T: for<'a> ::serde::Deserialize<'a>> Reason<T> {
    pub fn load() -> Option<Reason<T>> {
        let raw_len = unsafe { ::sys::_reason_len() };
        let mut raw = Vec::with_capacity(raw_len);
        unsafe { raw.set_len(raw_len) };
        unsafe { ::sys::_reason(raw.as_mut_ptr()) };
        match ::serde_json::from_slice(&raw) {
            Ok(v) => Some(v),
            Err(_) => None,
        }
    }
}