use crate::ext::pkix::name::OtherName;
use const_oid::db::rfc5911::ID_ON_HARDWARE_MODULE_NAME;
use der::{
Any, Sequence, ValueOrd,
asn1::{ObjectIdentifier, OctetString},
};
#[derive(Clone, Debug, Eq, PartialEq, Sequence, ValueOrd)]
#[allow(missing_docs)]
pub struct HardwareModuleName {
pub hw_type: ObjectIdentifier,
pub hw_serial_num: OctetString,
}
impl HardwareModuleName {
pub fn from_other_name(other_name: &OtherName) -> der::Result<Option<Self>> {
if other_name.type_id == ID_ON_HARDWARE_MODULE_NAME {
other_name.value.decode_as().map(Some)
} else {
Ok(None)
}
}
}
impl TryFrom<&HardwareModuleName> for OtherName {
type Error = der::Error;
fn try_from(hmn: &HardwareModuleName) -> der::Result<Self> {
Ok(Self {
type_id: ID_ON_HARDWARE_MODULE_NAME,
value: Any::encode_from(hmn)?,
})
}
}