reqwest_oauth1/
secrets.rs1use std::borrow::Cow;
2
3pub trait SecretsProvider {
5 fn get_consumer_key_pair<'a>(&'a self) -> (&'a str, &'a str);
6
7 fn get_token_pair_option<'a>(&'a self) -> Option<(&'a str, &'a str)>;
8
9 fn get_token_option_pair<'a>(&'a self) -> (Option<&'a str>, Option<&'a str>) {
10 self.get_token_pair_option()
11 .map(|s| (Some(s.0), Some(s.1)))
12 .unwrap_or_else(|| (None, None))
13 }
14}
15
16#[derive(Debug, Clone)]
50pub struct Secrets<'a> {
51 consumer_key_secret: (Cow<'a, str>, Cow<'a, str>),
52 token_key_secret: Option<(Cow<'a, str>, Cow<'a, str>)>,
53}
54
55impl<'a> Secrets<'a> {
56 pub fn new<TKey, TSecret>(consumer_key: TKey, consumer_secret: TSecret) -> Self
57 where
58 TKey: Into<Cow<'a, str>>,
59 TSecret: Into<Cow<'a, str>>,
60 {
61 Secrets {
62 consumer_key_secret: (consumer_key.into(), consumer_secret.into()),
63 token_key_secret: None,
64 }
65 }
66
67 pub fn new_with_token<TKey, TSecret, TToken, TTokenSecret>(
68 consumer_key: TKey,
69 consumer_secret: TSecret,
70 token: TToken,
71 token_secret: TTokenSecret,
72 ) -> Self
73 where
74 TKey: Into<Cow<'a, str>>,
75 TSecret: Into<Cow<'a, str>>,
76 TToken: Into<Cow<'a, str>>,
77 TTokenSecret: Into<Cow<'a, str>>,
78 {
79 Secrets {
80 consumer_key_secret: (consumer_key.into(), consumer_secret.into()),
81 token_key_secret: Some((token.into(), token_secret.into())),
82 }
83 }
84
85 pub fn token<TKey, TSecret>(self, token: TKey, token_secret: TSecret) -> Secrets<'a>
86 where
87 TKey: Into<Cow<'a, str>>,
88 TSecret: Into<Cow<'a, str>>,
89 {
90 Secrets {
91 token_key_secret: Some((token.into(), token_secret.into())),
92 ..self
93 }
94 }
95}
96
97impl SecretsProvider for Secrets<'_> {
98 fn get_consumer_key_pair<'a>(&'a self) -> (&'a str, &'a str) {
99 (&self.consumer_key_secret.0, &self.consumer_key_secret.1)
100 }
101
102 fn get_token_pair_option<'a>(&'a self) -> Option<(&'a str, &'a str)> {
103 match &self.token_key_secret {
104 Some((k, s)) => Some((&k, &s)),
105 None => None,
106 }
107 }
108}