1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use crate::{
credentials::{
Credentials,
ServiceId,
},
ToParams,
};
#[derive(Debug)]
pub struct Service {
service_id: ServiceId,
creds: Credentials,
}
impl Service {
pub fn new<T: Into<ServiceId>>(service_id: T, creds: Credentials) -> Self {
Self { service_id: service_id.into(),
creds }
}
}
use std::borrow::Cow;
impl<'k, 'v, 'this, E> ToParams<'k, 'v, 'this, E> for Service
where 'this: 'k + 'v,
E: Extend<(Cow<'k, str>, &'v str)>
{
fn to_params_with_mangling<F: FnMut(Cow<'k, str>) -> Cow<'k, str>>(&'this self,
extendable: &mut E,
key_mangling: &mut F) {
let key = key_mangling("service_id".into());
extendable.extend([(key, self.service_id.as_ref())].iter().cloned());
self.creds.to_params_with_mangling(extendable, key_mangling);
}
}
#[cfg(test)]
mod service_tests {
use super::*;
#[test]
fn transforms_service_id_and_key_into_params() {
let service_id = "my_service_id";
let provider_key = "my_provider_key";
let creds = Credentials::from_key(provider_key);
let service = Service::new(service_id, creds);
let mut result = Vec::new();
service.to_params(&mut result);
let expected: Vec<(Cow<str>, &str)> = vec![("service_id".into(), service_id),
("provider_key".into(), provider_key),];
assert_eq!(expected, result);
}
#[test]
fn transforms_service_id_and_token_into_params() {
let service_id = "my_service_id";
let token = "my_token";
let creds = Credentials::from_token(token);
let service = Service::new(service_id, creds);
let mut result = Vec::new();
service.to_params(&mut result);
let expected: Vec<(Cow<str>, &str)> =
vec![("service_id".into(), service_id), ("service_token".into(), token),];
assert_eq!(expected, result);
}
}