From 96715ceb58b24ee7220d98e421701daa550f44db Mon Sep 17 00:00:00 2001 From: David Blajda Date: Sun, 3 Feb 2019 22:30:15 +0000 Subject: Add Helix and Kraken scopes. Client Config and allow injecting of responses --- src/kraken/mod.rs | 26 +++++++++++++++++++++++--- src/kraken/models.rs | 18 ++++++++++++++++++ src/kraken/namespaces/mod.rs | 1 + src/kraken/namespaces/users.rs | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 src/kraken/namespaces/users.rs (limited to 'src/kraken') diff --git a/src/kraken/mod.rs b/src/kraken/mod.rs index fbec045..4046377 100644 --- a/src/kraken/mod.rs +++ b/src/kraken/mod.rs @@ -1,7 +1,10 @@ use crate::client::Client as GenericClient; -use crate::client::Version; +use crate::client::{Version, ClientConfig}; +use crate::client::ClientTrait; pub use super::types; +use crate::client::{KrakenScope, Scope}; + mod namespaces; pub mod models; @@ -12,17 +15,34 @@ pub struct Client { impl Client { pub fn new(id: &str) -> Client { + let config = ClientConfig::default(); + Client { + inner: GenericClient::new(id, config, Version::Kraken) + } + } + + pub fn new_with_config(id: &str, config: ClientConfig) -> Client { Client { - inner: GenericClient::new(id, Version::Kraken) + inner: GenericClient::new(id, config, Version::Kraken) } } pub fn authenticate(self, secret: &str) -> AuthClientBuilder { AuthClientBuilder::new(self, secret) } + + pub fn id<'a>(&'a self) -> &'a str { &self.inner.id() } + pub fn domain<'a>(&'a self) -> &'a str { &self.inner.domain() } + pub fn auth_domain<'a>(&'a self) -> &'a str { &self.inner.auth_domain() } + pub fn authenticated(&self) -> bool { self.inner.authenticated() } + + pub fn scopes(&self) -> Vec { + self.inner.scopes().into_iter().filter_map(|item| { + if let Scope::Kraken(scope) = item { Some(scope) } else { None } + }).collect() + } } -use crate::client::Scope; use crate::client::AuthClientBuilder as GenericAuthClientBuilder; pub struct AuthClientBuilder { diff --git a/src/kraken/models.rs b/src/kraken/models.rs index e8f2d6c..5b8c30b 100644 --- a/src/kraken/models.rs +++ b/src/kraken/models.rs @@ -7,6 +7,20 @@ use chrono::{DateTime, Utc}; use super::types::{UserId, VideoId}; use crate::client::PaginationTrait; +#[derive(Debug, Deserialize, Serialize)] +pub struct User { + pub _id: String, + pub bio: String, + pub created_at: DateTime, + pub display_name: String, + #[serde(with = "url_serde")] + pub logo: Url, + pub name: String, + #[serde(rename = "type")] + pub user_type: String, + pub updated_at: DateTime, +} + #[derive(Debug, Deserialize, Serialize)] pub struct Clip { pub slug: String, @@ -32,6 +46,10 @@ impl PaginationTrait for Clip { fn cursor<'a>(&'a self) -> Option<&'a str> { None } } +impl PaginationTrait for User { + fn cursor<'a>(&'a self) -> Option<&'a str> { None } +} + #[derive(Debug, Deserialize, Serialize)] pub struct Thumbnails { diff --git a/src/kraken/namespaces/mod.rs b/src/kraken/namespaces/mod.rs index 5f4b421..d8a065f 100644 --- a/src/kraken/namespaces/mod.rs +++ b/src/kraken/namespaces/mod.rs @@ -3,6 +3,7 @@ pub use super::models; pub use super::Client; pub mod clips; +pub mod users; pub struct Namespace { client: Client, diff --git a/src/kraken/namespaces/users.rs b/src/kraken/namespaces/users.rs new file mode 100644 index 0000000..d4adb8e --- /dev/null +++ b/src/kraken/namespaces/users.rs @@ -0,0 +1,32 @@ +use std::collections::BTreeMap; +use super::super::models::{User}; +use super::super::Client; +use crate::client::{RatelimitKey, ClientTrait, ApiRequest}; +use reqwest::Method; +use super::Namespace; + +pub struct Users {} +type UsersNamespace = Namespace; + +impl UsersNamespace { + pub fn by_id(self, id: &str) -> ApiRequest { + use self::by_id; + by_id(self.client, id) + } +} + +impl Client { + pub fn users(&self) -> UsersNamespace { + UsersNamespace::new(self) + } +} + +pub fn by_id(client: Client, id: &str) + -> ApiRequest +{ + let client = client.inner; + let url = String::from("https://") + client.domain() + "/kraken/users/" + id; + let params = BTreeMap::new(); + + ApiRequest::new(url, params, client, Method::GET, Some(RatelimitKey::Default)) +} -- cgit v1.2.3