diff options
Diffstat (limited to 'src/namespace')
-rw-r--r-- | src/namespace/auth.rs | 55 | ||||
-rw-r--r-- | src/namespace/mod.rs | 1 |
2 files changed, 56 insertions, 0 deletions
diff --git a/src/namespace/auth.rs b/src/namespace/auth.rs new file mode 100644 index 0000000..577aa92 --- /dev/null +++ b/src/namespace/auth.rs @@ -0,0 +1,55 @@ +use std::collections::BTreeMap; +use crate::models::Credentials; +use crate::client::Client; +const ID_DOMAIN: &'static str = "id.twitch.tv"; +use crate::client::{ClientTrait, ApiRequest}; +use reqwest::Method; +use std::marker::PhantomData; + +pub struct Namespace<T> { + client: Client, + _type: PhantomData<T> +} + +impl<T> Namespace<T> { + pub fn new(client: &Client) -> Self { + Namespace { + client: client.clone(), + _type: PhantomData, + } + } +} + +pub struct Auth {} +type AuthNamespace = Namespace<Auth>; + +impl AuthNamespace { + pub fn client_credentials(self, secret: &str) + -> ApiRequest<Credentials> { + use self::client_credentials; + client_credentials(self.client, secret) + } +} + +impl Client { + pub fn auth(&self) -> AuthNamespace { + AuthNamespace::new(self) + } +} + +//TODO: Implement scopes +pub fn client_credentials(client: Client, secret: &str) + -> ApiRequest<Credentials> { + + let url = + String::from("https://") + + ID_DOMAIN + "/oauth2/token"; + + let mut params = BTreeMap::new(); + params.insert("client_id", client.id()); + params.insert("client_secret", secret); + params.insert("grant_type", "client_credentials"); + params.insert("scope", ""); + + ApiRequest::new(url, params, client.clone(), Method::POST, None) +} diff --git a/src/namespace/mod.rs b/src/namespace/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/namespace/mod.rs @@ -0,0 +1 @@ +pub mod auth; |