diff options
Diffstat (limited to 'src/kraken')
-rw-r--r-- | src/kraken/mod.rs | 26 | ||||
-rw-r--r-- | src/kraken/models.rs | 18 | ||||
-rw-r--r-- | src/kraken/namespaces/mod.rs | 1 | ||||
-rw-r--r-- | src/kraken/namespaces/users.rs | 32 |
4 files changed, 74 insertions, 3 deletions
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<KrakenScope> { + 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 @@ -8,6 +8,20 @@ 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<Utc>, + 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<Utc>, +} + +#[derive(Debug, Deserialize, Serialize)] pub struct Clip { pub slug: String, pub tracking_id: 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<T> { 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<Users>; + +impl UsersNamespace { + pub fn by_id(self, id: &str) -> ApiRequest<User> { + 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<User> +{ + 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)) +} |