summaryrefslogtreecommitdiff
path: root/src/kraken
diff options
context:
space:
mode:
Diffstat (limited to 'src/kraken')
-rw-r--r--src/kraken/mod.rs26
-rw-r--r--src/kraken/models.rs18
-rw-r--r--src/kraken/namespaces/mod.rs1
-rw-r--r--src/kraken/namespaces/users.rs32
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))
+}