use std::{marker::PhantomData, ptr::null_mut};
pub use cryptoki_sys::CKM_VENDOR_DEFINED;
use cryptoki_sys::CK_MECHANISM;
use super::{make_mechanism, MechanismType};
#[derive(Debug, Clone, Copy)]
pub struct VendorDefinedMechanism<'a> {
pub(crate) inner: CK_MECHANISM,
_marker: PhantomData<&'a [u8]>,
}
impl<'a> VendorDefinedMechanism<'a> {
pub fn new<T>(mechanism_type: MechanismType, params: Option<&'a T>) -> Self {
Self {
inner: match params {
Some(params) => make_mechanism(mechanism_type.val, params),
None => CK_MECHANISM {
mechanism: mechanism_type.val,
pParameter: null_mut(),
ulParameterLen: 0,
},
},
_marker: PhantomData,
}
}
}