der/asn1/
sequence.rs
1use crate::{
5 BytesRef, DecodeValue, EncodeValue, FixedTag, Header, Length, Reader, Result, Tag, Writer,
6};
7
8#[cfg(feature = "alloc")]
9use alloc::boxed::Box;
10
11pub trait Sequence<'a>: DecodeValue<'a> + EncodeValue {}
15
16impl<'a, S> FixedTag for S
17where
18 S: Sequence<'a>,
19{
20 const TAG: Tag = Tag::Sequence;
21}
22
23#[cfg(feature = "alloc")]
24impl<'a, T> Sequence<'a> for Box<T> where T: Sequence<'a> {}
25
26pub struct SequenceRef<'a> {
31 body: BytesRef<'a>,
33}
34
35impl<'a> DecodeValue<'a> for SequenceRef<'a> {
36 fn decode_value<R: Reader<'a>>(reader: &mut R, header: Header) -> Result<Self> {
37 Ok(Self {
38 body: BytesRef::decode_value(reader, header)?,
39 })
40 }
41}
42
43impl EncodeValue for SequenceRef<'_> {
44 fn value_len(&self) -> Result<Length> {
45 Ok(self.body.len())
46 }
47
48 fn encode_value(&self, writer: &mut impl Writer) -> Result<()> {
49 self.body.encode_value(writer)
50 }
51}
52
53impl<'a> Sequence<'a> for SequenceRef<'a> {}