1use core::fmt::Debug;
2
3use crate::{error::*, BerParser};
4use crate::{Class, Explicit, Implicit, TaggedParser};
5
6#[doc(hidden)]
9#[derive(Debug)]
10pub enum BerMode {}
11
12#[doc(hidden)]
14#[derive(Debug)]
15pub enum DerMode {}
16
17#[doc(hidden)]
18pub trait ASN1Mode {}
19
20impl ASN1Mode for BerMode {}
21impl ASN1Mode for DerMode {}
22
23pub trait AsTaggedExplicit<'a, E = Error>: Sized {
34 fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E> {
35 TaggedParser::new_explicit(class, tag, self)
36 }
37}
38
39impl<'a, T, E> AsTaggedExplicit<'a, E> for T where T: BerParser<'a, Error = E> {}
40
41pub trait AsTaggedImplicit<'a, E = Error>: Sized {
52 fn implicit(
53 self,
54 class: Class,
55 constructed: bool,
56 tag: u32,
57 ) -> TaggedParser<'a, Implicit, Self, E> {
58 TaggedParser::new_implicit(class, constructed, tag, self)
59 }
60}
61
62impl<'a, T, E> AsTaggedImplicit<'a, E> for T where T: BerParser<'a, Error = E> {}
63
64pub use crate::tostatic::*;