tlsn_core/fixtures/
provider.rs

1use std::ops::Range;
2
3use crate::transcript::{
4    encoding::{new_encoder, Encoder, EncoderSecret, EncodingProvider, EncodingProviderError},
5    Direction, Transcript,
6};
7
8/// A encoding provider fixture.
9pub struct FixtureEncodingProvider {
10    encoder: Box<dyn Encoder>,
11    transcript: Transcript,
12}
13
14impl FixtureEncodingProvider {
15    /// Creates a new encoding provider fixture.
16    pub(crate) fn new(secret: &EncoderSecret, transcript: Transcript) -> Self {
17        Self {
18            encoder: Box::new(new_encoder(secret)),
19            transcript,
20        }
21    }
22}
23
24impl EncodingProvider for FixtureEncodingProvider {
25    fn provide_encoding(
26        &self,
27        direction: Direction,
28        range: Range<usize>,
29        dest: &mut Vec<u8>,
30    ) -> Result<(), EncodingProviderError> {
31        let transcript = match direction {
32            Direction::Sent => &self.transcript.sent(),
33            Direction::Received => &self.transcript.received(),
34        };
35
36        let data = transcript.get(range.clone()).ok_or(EncodingProviderError)?;
37        self.encoder.encode_data(direction, range, data, dest);
38
39        Ok(())
40    }
41}