diff options
author | David Blajda <blajda@hotmail.com> | 2019-01-29 04:41:18 +0000 |
---|---|---|
committer | David Blajda <blajda@hotmail.com> | 2019-01-29 04:41:18 +0000 |
commit | 7804ad5f3de94ce63ee0acef72b725275f5f658b (patch) | |
tree | dfb3c53f3549e31e88b8cb9c563165937165eecd | |
parent | e2078919afbbdbd71422de4d0d834847975d0232 (diff) |
Implement serialize for all models and for IntegerId
-rw-r--r-- | src/helix/models.rs | 14 | ||||
-rw-r--r-- | src/kraken/models.rs | 8 | ||||
-rw-r--r-- | src/types.rs | 9 |
3 files changed, 20 insertions, 11 deletions
diff --git a/src/helix/models.rs b/src/helix/models.rs index af221bc..e63a9f4 100644 --- a/src/helix/models.rs +++ b/src/helix/models.rs @@ -7,7 +7,7 @@ use crate::types::{UserId, VideoId, ChannelId}; use crate::client::PaginationTrait; -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct DataContainer<T> { pub data: Vec<T> } @@ -34,18 +34,18 @@ impl PaginationTrait for Credentials { fn cursor<'a>(&'a self) -> Option<&'a str> { None } } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct PaginationContainer<T> { pub data: Vec<T>, pub pagination: Option<Cursor> } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Cursor { pub cursor: Option<String> } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Video { pub id: VideoId<'static>, pub user_id: UserId<'static>, @@ -70,7 +70,7 @@ pub struct Video { pub duration: String, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct User { pub id: UserId<'static>, pub login: String, @@ -87,7 +87,7 @@ pub struct User { pub email: Option<String>, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Clip { pub id: String, #[serde(with = "url_serde")] @@ -108,7 +108,7 @@ pub struct Clip { pub view_count: i32, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Credentials { pub access_token: String, pub refresh_token: Option<String>, diff --git a/src/kraken/models.rs b/src/kraken/models.rs index d6a6e4f..e8f2d6c 100644 --- a/src/kraken/models.rs +++ b/src/kraken/models.rs @@ -7,7 +7,7 @@ use chrono::{DateTime, Utc}; use super::types::{UserId, VideoId}; use crate::client::PaginationTrait; -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Clip { pub slug: String, pub tracking_id: String, @@ -33,7 +33,7 @@ impl PaginationTrait for Clip { } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Thumbnails { #[serde(with = "url_serde")] pub medium: Url, @@ -43,7 +43,7 @@ pub struct Thumbnails { pub tiny: Url, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct UserData { pub id: UserId<'static>, pub name: String, @@ -53,7 +53,7 @@ pub struct UserData { pub logo: String, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] pub struct Vod { pub id: VideoId<'static>, #[serde(with = "url_serde")] diff --git a/src/types.rs b/src/types.rs index eb97e28..89375bb 100644 --- a/src/types.rs +++ b/src/types.rs @@ -121,6 +121,15 @@ impl<'de, T> Deserialize<'de> for IntegerId<'static, T> { } } +use serde::{Serialize, Serializer}; +impl<'a, T> Serialize for IntegerId<'a, T> { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: Serializer, + { + serializer.serialize_str(&self.id) + } +} pub struct Id { inner: String |