From 678e3d3f28cb8594204dc5e2b7597ae66a4582c7 Mon Sep 17 00:00:00 2001 From: David Blajda Date: Thu, 27 Dec 2018 22:03:23 +0000 Subject: Use Id types for endpoints and implement kraken headers --- src/kraken/endpoints.rs | 20 ------------------ src/kraken/mod.rs | 46 ++++++------------------------------------ src/kraken/models.rs | 5 +++++ src/kraken/namespaces/clips.rs | 33 ++++++++++++++++++++++++++++++ src/kraken/namespaces/mod.rs | 19 +++++++++++++++++ 5 files changed, 63 insertions(+), 60 deletions(-) create mode 100644 src/kraken/namespaces/clips.rs create mode 100644 src/kraken/namespaces/mod.rs (limited to 'src/kraken') diff --git a/src/kraken/endpoints.rs b/src/kraken/endpoints.rs index 7ae273c..e69de29 100644 --- a/src/kraken/endpoints.rs +++ b/src/kraken/endpoints.rs @@ -1,20 +0,0 @@ -use futures::Future; -use super::models::Clip; -use super::Client; - -use super::API_DOMAIN; - -impl Client { - pub fn clip(&self, id: &str) - -> impl Future - { - let url = String::from("https://") + API_DOMAIN + "/kraken/clips/" + id; - let request = self.inner.client.get(&url); - let request = self.apply_standard_headers(request); - - request - .send() - .map(|mut res| res.json::()) - .and_then(|json| json) - } -} diff --git a/src/kraken/mod.rs b/src/kraken/mod.rs index 59d00c0..0201295 100644 --- a/src/kraken/mod.rs +++ b/src/kraken/mod.rs @@ -1,53 +1,19 @@ -use reqwest::header; -use std::sync::Arc; -use reqwest::r#async::RequestBuilder; -use reqwest::r#async::Client as ReqwestClient; +use crate::client::Client as GenericClient; +use crate::client::Version; pub use super::types; -mod endpoints; -mod models; - - -const ACCEPT: &str = "application/vnd.twitchtv.v5+json"; -pub const API_DOMAIN: &str = "api.twitch.tv"; +mod namespaces; +pub mod models; #[derive(Clone)] pub struct Client { - inner: Arc, -} - -struct ClientRef { - id: String, - client: ReqwestClient + inner: GenericClient } impl Client { pub fn new(id: &str) -> Client { Client { - inner: Arc::new(ClientRef { - id: id.to_owned(), - client: ReqwestClient::new(), - }) + inner: GenericClient::new(id, Version::Kraken) } } - - pub fn new_with_client(id: &str, client: ReqwestClient) -> Client { - Client { - inner: Arc::new(ClientRef { - id: id.to_owned(), - client: client, - }) - } - } - - fn apply_standard_headers(&self, request: RequestBuilder) - -> RequestBuilder - { - let client_header = header::HeaderValue::from_str(&self.inner.id).unwrap(); - let accept_header = header::HeaderValue::from_str(ACCEPT).unwrap(); - - request - .header("Accept", accept_header) - .header("Client-ID", client_header) - } } diff --git a/src/kraken/models.rs b/src/kraken/models.rs index 4863641..8b5b6d6 100644 --- a/src/kraken/models.rs +++ b/src/kraken/models.rs @@ -5,6 +5,7 @@ extern crate url; use url::Url; use chrono::{DateTime, Utc}; use super::types::{UserId, VideoId}; +use crate::client::PaginationTrait; #[derive(Debug, Deserialize)] pub struct Clip { @@ -27,6 +28,10 @@ pub struct Clip { pub thumbnails: Thumbnails, } +impl PaginationTrait for Clip { + fn cursor<'a>(&'a self) -> Option<&'a str> { None } +} + #[derive(Debug, Deserialize)] pub struct Thumbnails { diff --git a/src/kraken/namespaces/clips.rs b/src/kraken/namespaces/clips.rs new file mode 100644 index 0000000..edde25b --- /dev/null +++ b/src/kraken/namespaces/clips.rs @@ -0,0 +1,33 @@ +use std::collections::BTreeMap; +use super::super::models::{Clip}; +use super::super::Client; +use crate::client::{RatelimitKey, ClientTrait, ApiRequest}; +use reqwest::Method; +use super::Namespace; + +pub struct Clips {} +type ClipsNamespace = Namespace; + +impl ClipsNamespace { + pub fn clip(self, id: &str) -> ApiRequest { + use self::clip; + clip(self.client, id) + } +} + +impl Client { + + pub fn clips(&self) -> ClipsNamespace { + ClipsNamespace::new(self) + } +} + +pub fn clip(client: Client, id: &str) + -> ApiRequest +{ + let client = client.inner; + let url = String::from("https://") + client.domain() + "/kraken/clips/" + id; + let params = BTreeMap::new(); + + ApiRequest::new(url, params, client, Method::GET, Some(RatelimitKey::Default)) +} diff --git a/src/kraken/namespaces/mod.rs b/src/kraken/namespaces/mod.rs new file mode 100644 index 0000000..5f4b421 --- /dev/null +++ b/src/kraken/namespaces/mod.rs @@ -0,0 +1,19 @@ +use std::marker::PhantomData; +pub use super::models; +pub use super::Client; + +pub mod clips; + +pub struct Namespace { + client: Client, + _type: PhantomData +} + +impl Namespace { + pub fn new(client: &Client) -> Self { + Namespace { + client: client.clone(), + _type: PhantomData, + } + } +} -- cgit v1.2.3