1use fake::{
3 faker::lorem::en::{Word, Words},
4 Dummy, Fake, Faker,
5};
6use rand::{Fill, Rng};
7use std::borrow::Cow;
8use uuid::Uuid;
9
10use crate::{
11 CreateClientRequest, CreateKeysetRequest, CreateKeysetResponse, GenerateKeyRequest,
12 GenerateKeySpec, GrantKeysetRequest, IdentifiedBy, Keyset, RetrieveKeyRequest,
13 RetrieveKeyRequestFallible, RetrieveKeySpec,
14};
15
16impl Dummy<&'static str> for CreateKeysetRequest<'_> {
18 fn dummy_with_rng<R: Rng + ?Sized>(name: &&'static str, _: &mut R) -> Self {
19 Self {
20 name: Cow::Borrowed(*name),
21 description: Cow::Owned("description".to_string()),
22 client: None,
23 }
24 }
25}
26
27impl Dummy<Faker> for Keyset {
28 fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, _: &mut R) -> Self {
29 Self {
30 id: Uuid::new_v4(),
31 name: Word().fake(),
32 description: Words(3..10).fake::<Vec<String>>().join(" "),
33 is_disabled: false,
34 is_default: false,
35 }
36 }
37}
38
39impl Dummy<Faker> for CreateKeysetRequest<'_> {
41 fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, _: &mut R) -> Self {
42 let words: Vec<String> = Words(3..10).fake();
43 let word: String = Word().fake();
44
45 Self {
46 name: Cow::Owned(format!("{word}-{}", Uuid::new_v4())),
47 description: Cow::Owned(words.join(" ")),
48 client: None,
49 }
50 }
51}
52
53impl Dummy<Keyset> for CreateClientRequest<'_> {
56 fn dummy_with_rng<R: Rng + ?Sized>(Keyset { id, .. }: &Keyset, _: &mut R) -> Self {
57 Self {
58 keyset_id: Some(IdentifiedBy::Uuid(*id)),
59 name: Cow::Owned(Word().fake()),
60 description: Cow::Owned(Word().fake()),
61 }
62 }
63}
64
65impl Dummy<CreateKeysetResponse> for CreateClientRequest<'_> {
67 fn dummy_with_rng<R: Rng + ?Sized>(resp: &CreateKeysetResponse, rng: &mut R) -> Self {
68 Self::dummy_with_rng(&resp.keyset, rng)
69 }
70}
71
72impl Dummy<(&Keyset, Uuid)> for GrantKeysetRequest {
74 fn dummy_with_rng<R: Rng + ?Sized>((keyset, client_id): &(&Keyset, Uuid), _: &mut R) -> Self {
75 Self {
76 keyset_id: IdentifiedBy::Uuid(keyset.id),
77 client_id: *client_id,
78 }
79 }
80}
81
82impl Dummy<(&CreateKeysetResponse, Uuid)> for GrantKeysetRequest {
83 fn dummy_with_rng<R: Rng + ?Sized>(
84 (resp, client_id): &(&CreateKeysetResponse, Uuid),
85 rng: &mut R,
86 ) -> Self {
87 Self::dummy_with_rng(&(&resp.keyset, *client_id), rng)
88 }
89}
90
91impl Dummy<(&Keyset, Uuid)> for GenerateKeyRequest<'_> {
92 fn dummy_with_rng<R: Rng + ?Sized>((keyset, client_id): &(&Keyset, Uuid), _: &mut R) -> Self {
93 Self {
94 keyset_id: Some(IdentifiedBy::Uuid(keyset.id)),
95 client_id: *client_id,
96 keys: Cow::Owned(fake::vec![GenerateKeySpec; 4]),
97 unverified_context: Default::default(),
98 }
99 }
100}
101
102impl Dummy<(&CreateKeysetResponse, Uuid)> for GenerateKeyRequest<'_> {
103 fn dummy_with_rng<R: Rng + ?Sized>(
104 (resp, client_id): &(&CreateKeysetResponse, Uuid),
105 rng: &mut R,
106 ) -> Self {
107 Self::dummy_with_rng(&(&resp.keyset, *client_id), rng)
108 }
109}
110
111impl Dummy<Faker> for GenerateKeySpec<'_> {
112 fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, rng: &mut R) -> Self {
113 let mut buf: [u8; 16] = Default::default();
114 buf.try_fill(rng).unwrap();
115
116 Self {
117 iv: buf.into(),
118 descriptor: Cow::Owned(Word().fake()),
119 context: Default::default(),
120 decryption_policy: None,
121 }
122 }
123}
124
125impl Dummy<(&Keyset, Uuid)> for RetrieveKeyRequest<'_> {
126 fn dummy_with_rng<R: Rng + ?Sized>((keyset, client_id): &(&Keyset, Uuid), _: &mut R) -> Self {
127 Self {
128 keyset_id: Some(IdentifiedBy::Uuid(keyset.id)),
129 client_id: *client_id,
130 keys: Cow::Owned(fake::vec![RetrieveKeySpec; 4]),
131 unverified_context: Default::default(),
132 }
133 }
134}
135
136impl Dummy<(&CreateKeysetResponse, Uuid)> for RetrieveKeyRequest<'_> {
137 fn dummy_with_rng<R: Rng + ?Sized>(
138 (resp, client_id): &(&CreateKeysetResponse, Uuid),
139 rng: &mut R,
140 ) -> Self {
141 Self::dummy_with_rng(&(&resp.keyset, *client_id), rng)
142 }
143}
144
145impl Dummy<(&Keyset, Uuid)> for RetrieveKeyRequestFallible<'_> {
146 fn dummy_with_rng<R: Rng + ?Sized>((keyset, client_id): &(&Keyset, Uuid), _: &mut R) -> Self {
147 Self {
148 keyset_id: Some(IdentifiedBy::Uuid(keyset.id)),
149 client_id: *client_id,
150 keys: Cow::Owned(fake::vec![RetrieveKeySpec; 4]),
151 unverified_context: Default::default(),
152 }
153 }
154}
155
156impl Dummy<Faker> for RetrieveKeySpec<'_> {
157 fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, rng: &mut R) -> Self {
158 let mut buf: [u8; 16] = Default::default();
159 buf.try_fill(rng).unwrap();
160
161 Self {
162 iv: buf.into(),
163 descriptor: Cow::Owned(Word().fake()),
164 tag: Cow::Owned([0u8; 16].map(|_| rng.gen()).to_vec()),
165 context: Cow::Owned(vec![]),
166 tag_version: 1,
167 decryption_policy: None,
168 }
169 }
170}