use bitflags::bitflags;
use cryptoki_sys::{self, CK_C_INITIALIZE_ARGS, CK_FLAGS};
use std::{
os::raw::c_void,
ptr::{self, NonNull},
};
bitflags! {
#[derive(Debug, Clone, Copy)]
pub struct CInitializeFlags: CK_FLAGS {
const OS_LOCKING_OK = cryptoki_sys::CKF_OS_LOCKING_OK;
const LIBRARY_CANT_CREATE_OS_THREADS = cryptoki_sys::CKF_LIBRARY_CANT_CREATE_OS_THREADS;
}
}
#[derive(Debug, Clone, Copy)]
pub struct CInitializeArgs {
flags: CInitializeFlags,
p_reserved: Option<NonNull<c_void>>,
}
impl CInitializeArgs {
pub fn new(flags: CInitializeFlags) -> Self {
Self {
flags,
p_reserved: None,
}
}
pub const unsafe fn new_with_reserved(
flags: CInitializeFlags,
p_reserved: NonNull<c_void>,
) -> Self {
Self {
flags,
p_reserved: Some(p_reserved),
}
}
}
impl From<CInitializeArgs> for CK_C_INITIALIZE_ARGS {
fn from(c_initialize_args: CInitializeArgs) -> Self {
let flags = c_initialize_args.flags.bits();
let p_reserved = c_initialize_args
.p_reserved
.map(|non_null| non_null.as_ptr())
.unwrap_or_else(ptr::null_mut);
Self {
CreateMutex: None,
DestroyMutex: None,
LockMutex: None,
UnlockMutex: None,
flags,
pReserved: p_reserved,
}
}
}