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
use reqwest::blocking::RequestBuilder; #[derive(Debug)] pub enum Credentials { UserAuthKey { email: String, key: String }, UserAuthToken { token: String }, Service { key: String }, } impl Credentials { pub fn headers(&self) -> Vec<(&'static str, String)> { match self { Self::UserAuthKey { email, key } => { vec![("X-Auth-Email", email.clone()), ("X-Auth-Key", key.clone())] } Self::UserAuthToken { token } => { vec![("Authorization", format!("Bearer {}", token.clone()))] } Self::Service { key } => vec![("X-Auth-User-Service-Key", key.clone())], } } } pub trait AuthClient { fn auth(self, credentials: &Credentials) -> Self; } impl AuthClient for RequestBuilder { fn auth(mut self, credentials: &Credentials) -> Self { for (k, v) in credentials.headers() { self = self.header(k, v); } self } }