tlsn_core/request/
config.rs

1use crate::{
2    attestation::Extension, hash::HashAlgId, signing::SignatureAlgId,
3    transcript::TranscriptCommitConfig,
4};
5
6/// Request configuration.
7#[derive(Debug, Clone)]
8pub struct RequestConfig {
9    signature_alg: SignatureAlgId,
10    hash_alg: HashAlgId,
11    extensions: Vec<Extension>,
12    transcript_commit: Option<TranscriptCommitConfig>,
13}
14
15impl Default for RequestConfig {
16    fn default() -> Self {
17        Self::builder().build().unwrap()
18    }
19}
20
21impl RequestConfig {
22    /// Creates a new builder.
23    pub fn builder() -> RequestConfigBuilder {
24        RequestConfigBuilder::default()
25    }
26
27    /// Returns the signature algorithm.
28    pub fn signature_alg(&self) -> &SignatureAlgId {
29        &self.signature_alg
30    }
31
32    /// Returns the hash algorithm.
33    pub fn hash_alg(&self) -> &HashAlgId {
34        &self.hash_alg
35    }
36
37    /// Returns the extensions.
38    pub fn extensions(&self) -> &[Extension] {
39        &self.extensions
40    }
41
42    /// Returns the transcript commitment configuration.
43    pub fn transcript_commit(&self) -> Option<&TranscriptCommitConfig> {
44        self.transcript_commit.as_ref()
45    }
46}
47
48/// Builder for [`RequestConfig`].
49#[derive(Debug)]
50pub struct RequestConfigBuilder {
51    signature_alg: SignatureAlgId,
52    hash_alg: HashAlgId,
53    extensions: Vec<Extension>,
54    transcript_commit: Option<TranscriptCommitConfig>,
55}
56
57impl Default for RequestConfigBuilder {
58    fn default() -> Self {
59        Self {
60            signature_alg: SignatureAlgId::SECP256K1,
61            hash_alg: HashAlgId::BLAKE3,
62            extensions: Vec::new(),
63            transcript_commit: None,
64        }
65    }
66}
67
68impl RequestConfigBuilder {
69    /// Sets the signature algorithm.
70    pub fn signature_alg(&mut self, signature_alg: SignatureAlgId) -> &mut Self {
71        self.signature_alg = signature_alg;
72        self
73    }
74
75    /// Sets the hash algorithm.
76    pub fn hash_alg(&mut self, hash_alg: HashAlgId) -> &mut Self {
77        self.hash_alg = hash_alg;
78        self
79    }
80
81    /// Adds an extension to the request.
82    pub fn extension(&mut self, extension: Extension) -> &mut Self {
83        self.extensions.push(extension);
84        self
85    }
86
87    /// Sets the transcript commitment configuration.
88    pub fn transcript_commit(&mut self, transcript_commit: TranscriptCommitConfig) -> &mut Self {
89        self.transcript_commit = Some(transcript_commit);
90        self
91    }
92
93    /// Builds the config.
94    pub fn build(self) -> Result<RequestConfig, RequestConfigBuilderError> {
95        Ok(RequestConfig {
96            signature_alg: self.signature_alg,
97            hash_alg: self.hash_alg,
98            extensions: self.extensions,
99            transcript_commit: self.transcript_commit,
100        })
101    }
102}
103
104/// Error for [`RequestConfigBuilder`].
105#[derive(Debug, thiserror::Error)]
106#[error("request configuration builder error: {message}")]
107pub struct RequestConfigBuilderError {
108    message: String,
109}