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
36
37
38
39
40
41
use menoh_sys;

use Error;

/// Representation of scalar types supported by Menoh.
pub unsafe trait Dtype {
    /// Integer specifying the scalar type.
    ///
    /// ```
    /// # extern crate menoh;
    /// # extern crate menoh_sys;
    /// # use menoh::*;
    /// assert_eq!(f32::ID, menoh_sys::menoh_dtype_float as menoh_sys::menoh_dtype);
    /// ```
    const ID: menoh_sys::menoh_dtype;

    /// Verify a scalar type.
    ///
    /// ```
    /// # use menoh::*;
    /// assert!(f32::check(f32::ID).is_ok());
    /// assert!(f32::check(f32::ID + 1).is_err());
    /// ```
    fn check(dtype: menoh_sys::menoh_dtype) -> Result<(), Error> {
        if dtype == Self::ID {
            Ok(())
        } else {
            Err(Error::DtypeMismatch {
                    actual: dtype,
                    expected: Self::ID,
                })
        }
    }
}

unsafe impl Dtype for f32 {
    const ID: menoh_sys::menoh_dtype = menoh_sys::menoh_dtype_float as _;
}

#[cfg(test)]
mod tests;