use crate::decode;
use crate::decode::DecodeError;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Mode {
Ber,
Cer,
Der,
}
impl Mode {
pub fn decode<S, F, T>(
self, source: S, op: F,
) -> Result<T, DecodeError<<S::Source as decode::Source>::Error>>
where
S: decode::IntoSource,
F: FnOnce(
&mut decode::Constructed<S::Source>
) -> Result<T, DecodeError<<S::Source as decode::Source>::Error>>,
{
decode::Constructed::decode(source, self, op)
}
pub fn is_ber(self) -> bool {
matches!(self, Mode::Ber)
}
pub fn is_cer(self) -> bool {
matches!(self, Mode::Cer)
}
pub fn is_der(self) -> bool {
matches!(self, Mode::Der)
}
}
impl Default for Mode {
fn default() -> Self {
Mode::Ber
}
}