summaryrefslogtreecommitdiff
path: root/src/kraken
diff options
context:
space:
mode:
authorDavid Blajda <blajda@hotmail.com>2018-12-27 22:03:23 +0000
committerDavid Blajda <blajda@hotmail.com>2018-12-27 22:03:23 +0000
commit678e3d3f28cb8594204dc5e2b7597ae66a4582c7 (patch)
tree55b563cfdc09dab8f18c1f4d688ebf0c2187985c /src/kraken
parentcb1b144e48ee357a76f551433d4886f092d259c8 (diff)
Use Id types for endpoints and implement kraken headers
Diffstat (limited to 'src/kraken')
-rw-r--r--src/kraken/endpoints.rs20
-rw-r--r--src/kraken/mod.rs46
-rw-r--r--src/kraken/models.rs5
-rw-r--r--src/kraken/namespaces/clips.rs33
-rw-r--r--src/kraken/namespaces/mod.rs19
5 files changed, 63 insertions, 60 deletions
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<Item=Clip, Error=reqwest::Error>
- {
- 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::<Clip>())
- .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<ClientRef>,
-}
-
-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<Clips>;
+
+impl ClipsNamespace {
+ pub fn clip(self, id: &str) -> ApiRequest<Clip> {
+ 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<Clip>
+{
+ 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<T> {
+ client: Client,
+ _type: PhantomData<T>
+}
+
+impl<T> Namespace<T> {
+ pub fn new(client: &Client) -> Self {
+ Namespace {
+ client: client.clone(),
+ _type: PhantomData,
+ }
+ }
+}