use super::types::Asn1ResolvedType;
pub(crate) type BaseInteger = i128;
pub(crate) type BaseEnum = i64;
pub(crate) type BaseBoolean = bool;
pub(crate) type BaseCharString = bool;
pub(crate) type BaseOctetSTring = Vec<u8>;
#[derive(Debug, Clone)]
pub(crate) struct Asn1ResolvedIntegerValue {
pub(crate) typeref: Asn1ResolvedType,
pub(crate) value: BaseInteger,
}
#[derive(Debug, Clone)]
pub(crate) struct Asn1ResolvedEnumValue {
pub(crate) typeref: Asn1ResolvedType,
pub(crate) value: BaseEnum,
}
#[derive(Debug, Clone)]
pub(crate) enum ResolvedBaseValue {
Integer(Asn1ResolvedIntegerValue),
Enum(Asn1ResolvedEnumValue),
}
#[derive(Debug, Clone)]
pub(crate) struct ResolvedRefValue {
pub(crate) reference: String,
pub(crate) value: Box<Asn1ResolvedValue>,
}
#[derive(Debug, Clone)]
pub(crate) enum Asn1ResolvedValue {
Reference(String),
ReferencedType {
typeref: String,
value: Box<Asn1ResolvedValue>,
},
Base(ResolvedBaseValue),
}
impl Asn1ResolvedValue {
pub(crate) fn get_base_integer_value(&self) -> Option<i128> {
match self {
Self::Base(ref b) => match b {
ResolvedBaseValue::Integer(ref i) => Some(i.value as i128),
_ => None,
},
Self::ReferencedType { value, .. } => value.get_base_integer_value(),
_ => None,
}
}
}