mini_mail_auth/dkim/
builder.rs1use super::{Canonicalization, DkimSigner, Done, NeedDomain, NeedHeaders, NeedSelector};
2use crate::common::crypto::SigningKey;
3
4impl<T: SigningKey> DkimSigner<T> {
5 pub fn from_key(key: T) -> DkimSigner<T, NeedDomain> {
6 DkimSigner {
7 _state: Default::default(),
8 template: super::Signature {
9 v: 1,
10 a: key.algorithm(),
11 ..Default::default()
12 },
13 key,
14 }
15 }
16}
17
18impl<T: SigningKey> DkimSigner<T, NeedDomain> {
19 pub fn domain(mut self, domain: impl Into<String>) -> DkimSigner<T, NeedSelector> {
20 self.template.d = domain.into();
21 DkimSigner {
22 _state: Default::default(),
23 key: self.key,
24 template: self.template,
25 }
26 }
27}
28
29impl<T: SigningKey> DkimSigner<T, NeedSelector> {
30 pub fn selector(mut self, selector: impl Into<String>) -> DkimSigner<T, NeedHeaders> {
31 self.template.s = selector.into();
32 DkimSigner {
33 _state: Default::default(),
34 key: self.key,
35 template: self.template,
36 }
37 }
38}
39
40impl<T: SigningKey> DkimSigner<T, NeedHeaders> {
41 pub fn headers(
42 mut self,
43 headers: impl IntoIterator<Item = impl Into<String>>,
44 ) -> DkimSigner<T, Done> {
45 self.template.h = headers.into_iter().map(|h| h.into()).collect();
46 DkimSigner {
47 _state: Default::default(),
48 key: self.key,
49 template: self.template,
50 }
51 }
52}
53
54impl<T: SigningKey> DkimSigner<T, Done> {
55 pub fn body_length(mut self, body_length: bool) -> Self {
56 self.template.l = u64::from(body_length);
57 self
58 }
59
60 pub fn header_canonicalization(mut self, ch: Canonicalization) -> Self {
61 self.template.ch = ch;
62 self
63 }
64
65 pub fn body_canonicalization(mut self, cb: Canonicalization) -> Self {
66 self.template.cb = cb;
67 self
68 }
69}