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
extern crate failure; #[macro_use] extern crate failure_derive; extern crate libhydrogen_sys as ffi; pub mod errors; pub mod hash; pub mod kdf; pub mod random; pub mod secretbox; pub mod sign; pub mod utils; pub mod version; use errors::*; use std::sync::{Once, ONCE_INIT}; static INIT: Once = ONCE_INIT; static mut INITIALIZED: bool = false; pub fn init() -> Result<(), HydroError> { unsafe { INIT.call_once(|| { if ffi::hydro_init() >= 0 { INITIALIZED = true; } }); if INITIALIZED { Ok(()) } else { Err(HydroError::InitError) } } } pub fn ensure_initialized() { if unsafe { !INITIALIZED } { panic!("Hydrogen library not initialized"); } }