tlsn_core/request/
config.rs

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