From cb1b144e48ee357a76f551433d4886f092d259c8 Mon Sep 17 00:00:00 2001 From: David Blajda Date: Thu, 27 Dec 2018 04:46:10 +0000 Subject: Use a generic client for both helix and kraken --- src/namespace/auth.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/namespace/mod.rs | 1 + 2 files changed, 56 insertions(+) create mode 100644 src/namespace/auth.rs create mode 100644 src/namespace/mod.rs (limited to 'src/namespace') 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 { + client: Client, + _type: PhantomData +} + +impl Namespace { + pub fn new(client: &Client) -> Self { + Namespace { + client: client.clone(), + _type: PhantomData, + } + } +} + +pub struct Auth {} +type AuthNamespace = Namespace; + +impl AuthNamespace { + pub fn client_credentials(self, secret: &str) + -> ApiRequest { + 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 { + + 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; -- cgit v1.2.3