From a77b5f5a4ddf0132747bd71c33fecaf4f037890a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emil=20Gardstr=C3=B6m?= Date: Sat, 4 Nov 2023 19:58:40 +0100 Subject: [PATCH] decouple serde and serde_derive --- Cargo.lock | 3 +++ Cargo.toml | 3 ++- examples/channel_information_custom.rs | 2 +- examples/eventsub/Cargo.toml | 5 +++-- examples/eventsub/src/twitch.rs | 2 +- examples/eventsub_websocket/Cargo.toml | 2 +- .../channel/channel_points_custom_reward/mod.rs | 2 +- .../channel_points_custom_reward_redemption/mod.rs | 2 +- src/eventsub/channel/charity_campaign/mod.rs | 2 +- src/eventsub/channel/goal/mod.rs | 2 +- src/eventsub/channel/hypetrain/mod.rs | 2 +- src/eventsub/channel/mod.rs | 2 +- src/eventsub/channel/poll/mod.rs | 2 +- src/eventsub/channel/prediction/mod.rs | 2 +- src/eventsub/channel/shield_mode/mod.rs | 2 +- src/eventsub/channel/shoutout/mod.rs | 2 +- src/eventsub/channel/subscription/mod.rs | 2 +- src/eventsub/event.rs | 4 ++-- src/eventsub/event/websocket.rs | 2 +- src/eventsub/mod.rs | 7 ++++--- src/eventsub/stream/mod.rs | 2 +- src/eventsub/user/authorization/mod.rs | 2 +- src/eventsub/user/mod.rs | 2 +- src/extra.rs | 2 +- src/helix/endpoints/bits/mod.rs | 2 +- src/helix/endpoints/channels/mod.rs | 2 +- src/helix/endpoints/charity/mod.rs | 2 +- src/helix/endpoints/chat/mod.rs | 2 +- src/helix/endpoints/clips/mod.rs | 2 +- src/helix/endpoints/eventsub/mod.rs | 2 +- src/helix/endpoints/games/mod.rs | 2 +- src/helix/endpoints/goals/mod.rs | 2 +- src/helix/endpoints/hypetrain/mod.rs | 2 +- .../endpoints/moderation/get_shield_mode_status.rs | 2 +- src/helix/endpoints/moderation/mod.rs | 2 +- src/helix/endpoints/points/mod.rs | 4 ++-- src/helix/endpoints/polls/mod.rs | 2 +- src/helix/endpoints/predictions/mod.rs | 2 +- src/helix/endpoints/raids/mod.rs | 2 +- src/helix/endpoints/schedule/mod.rs | 2 +- src/helix/endpoints/search/mod.rs | 2 +- src/helix/endpoints/streams/mod.rs | 2 +- .../get_broadcaster_subscriptions_events.rs | 2 ++ src/helix/endpoints/subscriptions/mod.rs | 2 +- src/helix/endpoints/tags/mod.rs | 2 +- src/helix/endpoints/teams/mod.rs | 2 +- src/helix/endpoints/users/mod.rs | 2 +- src/helix/endpoints/videos/mod.rs | 2 +- src/helix/endpoints/whispers/mod.rs | 2 +- src/helix/mod.rs | 2 +- src/helix/ser.rs | 4 ++-- src/pubsub/automod_queue.rs | 2 +- src/pubsub/channel_bits.rs | 2 +- src/pubsub/channel_bits_badge.rs | 2 +- src/pubsub/channel_cheer.rs | 2 +- src/pubsub/channel_points.rs | 2 +- src/pubsub/channel_sub_gifts.rs | 2 +- src/pubsub/channel_subscriptions.rs | 2 +- src/pubsub/community_points.rs | 2 +- src/pubsub/following.rs | 2 +- src/pubsub/hypetrain.rs | 2 +- src/pubsub/mod.rs | 11 +++++++---- src/pubsub/moderation.rs | 7 +++++-- src/pubsub/raid.rs | 2 +- src/pubsub/user_moderation_notifications.rs | 2 +- src/pubsub/video_playback.rs | 2 +- src/tmi/mod.rs | 2 +- twitch_types | 2 +- xtask/Cargo.toml | 3 ++- xtask/src/main.rs | 2 +- 70 files changed, 93 insertions(+), 78 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ecc695f16d..8f6e660593 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -832,6 +832,7 @@ dependencies = [ "reqwest", "retainer", "serde", + "serde_derive", "serde_json", "tokio", "tokio-tungstenite", @@ -2863,6 +2864,7 @@ dependencies = [ "reqwest", "serde", "serde_cbor", + "serde_derive", "serde_ignored", "serde_json", "serde_path_to_error", @@ -3287,6 +3289,7 @@ dependencies = [ "color-eyre", "once_cell", "serde", + "serde_derive", "serde_json", "xshell", ] diff --git a/Cargo.toml b/Cargo.toml index 966dd94368..1517e85629 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,8 @@ typed-builder = { version = "0.18.0", optional = true } url = "2.4.1" once_cell = "1.18.0" twitch_oauth2 = { workspace = true, optional = true } -serde = { version = "1.0.190", features = ["derive"] } +serde = { version = "1.0.190" } +serde_derive = { version = "1.0.190" } serde_path_to_error = { version = "0.1.14", optional = true } async-trait = { version = "0.1.74", optional = true } serde_json = { version = "1.0.107", optional = true } diff --git a/examples/channel_information_custom.rs b/examples/channel_information_custom.rs index bde0d70bb9..8a4a071271 100644 --- a/examples/channel_information_custom.rs +++ b/examples/channel_information_custom.rs @@ -43,7 +43,7 @@ async fn run() -> Result<(), Box> /// Return Values for Get Channel Information /// /// [`get-channel-information`](https://dev.twitch.tv/docs/api/reference#get-channel-information) -#[derive(PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug, Clone)] +#[derive(PartialEq, Eq, serde::Deserialize, serde_derive::Serialize, Debug, Clone)] pub struct CustomChannelInformation<'a> { /// Twitch User ID of this channel owner pub broadcaster_id: &'a types::UserIdRef, diff --git a/examples/eventsub/Cargo.toml b/examples/eventsub/Cargo.toml index 6374abf997..5ecd95bd2a 100644 --- a/examples/eventsub/Cargo.toml +++ b/examples/eventsub/Cargo.toml @@ -6,7 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -askama = { version = "0.11", features = ["with-axum"], git = "https://github.com/djc/askama", rev = "eeec6f0" } +askama = { version = "0.11", features = ["with-axum"], git = "https://github.com/djc/askama", rev = "eeec6f0", default-features = false } askama_axum = { version = "0.1", git = "https://github.com/djc/askama", rev = "eeec6f0" } axum = { version = "0.6.20", features = ["tower-log", "http2", "ws"] } clap = { version = "4.4.7", features = ["derive", "env"] } @@ -17,7 +17,8 @@ futures = "0.3.28" hyper = "0.14" reqwest = "0.11.22" retainer = "0.3.0" -serde = { version = "1", features = ["derive"] } +serde = "1.0.190" +serde_derive = "1.0.190" serde_json = { version = "1" } tokio = { version = "1.33.0", features = ["macros", "rt-multi-thread"] } tokio-tungstenite = "0.20.1" diff --git a/examples/eventsub/src/twitch.rs b/examples/eventsub/src/twitch.rs index dba0af1285..ac059064df 100644 --- a/examples/eventsub/src/twitch.rs +++ b/examples/eventsub/src/twitch.rs @@ -340,7 +340,7 @@ impl LiveStatus { pub fn is_offline(&self) -> bool { matches!(self, Self::Offline { .. }) } pub fn to_message(&self) -> eyre::Result { - #[derive(serde::Serialize)] + #[derive(serde_derive::Serialize)] struct Msg { html: String, live: bool, diff --git a/examples/eventsub_websocket/Cargo.toml b/examples/eventsub_websocket/Cargo.toml index 894eb8a884..5a1cc2c06f 100644 --- a/examples/eventsub_websocket/Cargo.toml +++ b/examples/eventsub_websocket/Cargo.toml @@ -13,7 +13,7 @@ eyre = { version = "0.6" } futures = "0.3.28" hyper = "0.14" reqwest = { version = "0.11.22", features = ["json"] } -serde = { version = "1", features = ["derive"] } +serde = "1" serde_json = { version = "1" } tokio = { version = "1.33.0", features = ["macros", "rt-multi-thread"] } tokio-tungstenite = { version = "0.20.1", features = ["native-tls"] } diff --git a/src/eventsub/channel/channel_points_custom_reward/mod.rs b/src/eventsub/channel/channel_points_custom_reward/mod.rs index 19e677c9b4..52552783ef 100644 --- a/src/eventsub/channel/channel_points_custom_reward/mod.rs +++ b/src/eventsub/channel/channel_points_custom_reward/mod.rs @@ -3,7 +3,7 @@ //! Custom channel points rewards on specific channel has been changed, removed or updated. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod add; pub mod remove; diff --git a/src/eventsub/channel/channel_points_custom_reward_redemption/mod.rs b/src/eventsub/channel/channel_points_custom_reward_redemption/mod.rs index 43ffc5144c..abb972ae61 100644 --- a/src/eventsub/channel/channel_points_custom_reward_redemption/mod.rs +++ b/src/eventsub/channel/channel_points_custom_reward_redemption/mod.rs @@ -3,7 +3,7 @@ //! A viewer has redeemed a custom channel points reward or a redemption of a channel points custom reward has been updated for the specified channel. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod add; pub mod update; diff --git a/src/eventsub/channel/charity_campaign/mod.rs b/src/eventsub/channel/charity_campaign/mod.rs index ddea8f4897..603ce188ef 100644 --- a/src/eventsub/channel/charity_campaign/mod.rs +++ b/src/eventsub/channel/charity_campaign/mod.rs @@ -2,7 +2,7 @@ //! Poll on a specific channel has been begun, ended or progressed. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod donate; pub mod progress; diff --git a/src/eventsub/channel/goal/mod.rs b/src/eventsub/channel/goal/mod.rs index f57b4aa2b9..59b74b6bed 100644 --- a/src/eventsub/channel/goal/mod.rs +++ b/src/eventsub/channel/goal/mod.rs @@ -2,7 +2,7 @@ //! A broadcaster has started, progressed or ended a goal. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod begin; pub mod end; diff --git a/src/eventsub/channel/hypetrain/mod.rs b/src/eventsub/channel/hypetrain/mod.rs index add7396219..888cadc2de 100644 --- a/src/eventsub/channel/hypetrain/mod.rs +++ b/src/eventsub/channel/hypetrain/mod.rs @@ -2,7 +2,7 @@ //! A hype train has started, progressed or ended. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod begin; pub mod end; diff --git a/src/eventsub/channel/mod.rs b/src/eventsub/channel/mod.rs index 0d04a751f7..4e3f34b692 100644 --- a/src/eventsub/channel/mod.rs +++ b/src/eventsub/channel/mod.rs @@ -3,7 +3,7 @@ //! Subscription types regarding channels use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod ban; pub mod channel_points_custom_reward; diff --git a/src/eventsub/channel/poll/mod.rs b/src/eventsub/channel/poll/mod.rs index b73b7600ad..ab2a6a1358 100644 --- a/src/eventsub/channel/poll/mod.rs +++ b/src/eventsub/channel/poll/mod.rs @@ -2,7 +2,7 @@ //! Poll on a specific channel has been begun, ended or progressed. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod begin; pub mod end; diff --git a/src/eventsub/channel/prediction/mod.rs b/src/eventsub/channel/prediction/mod.rs index 0984f68ee7..2fe88c3a9c 100644 --- a/src/eventsub/channel/prediction/mod.rs +++ b/src/eventsub/channel/prediction/mod.rs @@ -2,7 +2,7 @@ //! Prediction on the specified channel begins, progresses, locks or ends. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod begin; pub mod end; diff --git a/src/eventsub/channel/shield_mode/mod.rs b/src/eventsub/channel/shield_mode/mod.rs index 646fbdec25..908679d11e 100644 --- a/src/eventsub/channel/shield_mode/mod.rs +++ b/src/eventsub/channel/shield_mode/mod.rs @@ -2,7 +2,7 @@ //! Shield mode on the specified channel begins or ends. use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod begin; pub mod end; diff --git a/src/eventsub/channel/shoutout/mod.rs b/src/eventsub/channel/shoutout/mod.rs index 1c6cd9b051..4db687d4c3 100644 --- a/src/eventsub/channel/shoutout/mod.rs +++ b/src/eventsub/channel/shoutout/mod.rs @@ -2,7 +2,7 @@ //! Subscription for when a Shoutout has happened use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod create; pub mod receive; diff --git a/src/eventsub/channel/subscription/mod.rs b/src/eventsub/channel/subscription/mod.rs index 7cfafc20b4..e721a4f8bd 100644 --- a/src/eventsub/channel/subscription/mod.rs +++ b/src/eventsub/channel/subscription/mod.rs @@ -2,7 +2,7 @@ //! Subscription on a specified channel has changed use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod end; pub mod gift; diff --git a/src/eventsub/event.rs b/src/eventsub/event.rs index 0838f4e8f3..a106decc89 100644 --- a/src/eventsub/event.rs +++ b/src/eventsub/event.rs @@ -4,7 +4,7 @@ pub mod websocket; use std::borrow::Cow; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use super::*; @@ -512,7 +512,7 @@ fn get_version_event_type_and_message_type_from_http( request: &http::Request, ) -> Result<(Cow<'_, str>, EventType, Cow<'_, [u8]>), PayloadParseError> where B: AsRef<[u8]> { - use serde::de::IntoDeserializer; + use serde::{de::IntoDeserializer, Deserialize}; match ( request .headers() diff --git a/src/eventsub/event/websocket.rs b/src/eventsub/event/websocket.rs index 706f954564..701dc08f7e 100644 --- a/src/eventsub/event/websocket.rs +++ b/src/eventsub/event/websocket.rs @@ -2,7 +2,7 @@ use std::borrow::Cow; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use super::{Event, EventType}; diff --git a/src/eventsub/mod.rs b/src/eventsub/mod.rs index 6e63fa3343..c3e9d1da1b 100644 --- a/src/eventsub/mod.rs +++ b/src/eventsub/mod.rs @@ -78,7 +78,8 @@ use std::borrow::Cow; use crate::types; -use serde::{de::DeserializeOwned, Deserialize, Serialize}; +use serde::de::DeserializeOwned; +use serde_derive::{Deserialize, Serialize}; use crate::parse_json; @@ -93,9 +94,9 @@ pub use event::{Event, EventType}; pub use event::websocket::*; /// An EventSub subscription. -pub trait EventSubscription: DeserializeOwned + Serialize + PartialEq + Clone { +pub trait EventSubscription: DeserializeOwned + serde::Serialize + PartialEq + Clone { /// Payload for given subscription - type Payload: PartialEq + std::fmt::Debug + DeserializeOwned + Serialize + Clone; + type Payload: PartialEq + std::fmt::Debug + DeserializeOwned + serde::Serialize + Clone; /// Scopes needed by this subscription #[cfg(feature = "twitch_oauth2")] diff --git a/src/eventsub/stream/mod.rs b/src/eventsub/stream/mod.rs index 5e5cda30cc..d0ca2b395b 100644 --- a/src/eventsub/stream/mod.rs +++ b/src/eventsub/stream/mod.rs @@ -3,7 +3,7 @@ use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod offline; pub mod online; diff --git a/src/eventsub/user/authorization/mod.rs b/src/eventsub/user/authorization/mod.rs index df217fe8d9..b5fca049c7 100644 --- a/src/eventsub/user/authorization/mod.rs +++ b/src/eventsub/user/authorization/mod.rs @@ -1,7 +1,7 @@ //! Authorization from a user has been granted or revoked to a specific client ID use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod grant; pub mod revoke; diff --git a/src/eventsub/user/mod.rs b/src/eventsub/user/mod.rs index 2c4a3d9bea..b785048fcc 100644 --- a/src/eventsub/user/mod.rs +++ b/src/eventsub/user/mod.rs @@ -2,7 +2,7 @@ use super::{EventSubscription, EventType}; use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; pub mod authorization; pub mod update; diff --git a/src/extra.rs b/src/extra.rs index 5d7a3ae396..1a50423d15 100644 --- a/src/extra.rs +++ b/src/extra.rs @@ -1,5 +1,5 @@ #[cfg(any(feature = "eventsub", feature = "helix"))] -#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +#[derive(Clone, Debug, PartialEq, Eq, serde_derive::Serialize, serde_derive::Deserialize)] #[cfg_attr(feature = "deny_unknown_fields", serde(deny_unknown_fields))] #[non_exhaustive] /// Represents a donation "amount" diff --git a/src/helix/endpoints/bits/mod.rs b/src/helix/endpoints/bits/mod.rs index 2ae3d728ae..c1b88dfee0 100644 --- a/src/helix/endpoints/bits/mod.rs +++ b/src/helix/endpoints/bits/mod.rs @@ -21,7 +21,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_bits_leaderboard; diff --git a/src/helix/endpoints/channels/mod.rs b/src/helix/endpoints/channels/mod.rs index a01006e768..44c98d6a10 100644 --- a/src/helix/endpoints/channels/mod.rs +++ b/src/helix/endpoints/channels/mod.rs @@ -24,7 +24,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod add_channel_vip; diff --git a/src/helix/endpoints/charity/mod.rs b/src/helix/endpoints/charity/mod.rs index df73bdaf0a..aa5d5cbf99 100644 --- a/src/helix/endpoints/charity/mod.rs +++ b/src/helix/endpoints/charity/mod.rs @@ -3,7 +3,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_charity_campaign; diff --git a/src/helix/endpoints/chat/mod.rs b/src/helix/endpoints/chat/mod.rs index b14ee24a53..3b7b934cba 100644 --- a/src/helix/endpoints/chat/mod.rs +++ b/src/helix/endpoints/chat/mod.rs @@ -4,7 +4,7 @@ use crate::{ helix::{self, Request}, types::{self, EmoteUrlBuilder}, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_channel_chat_badges; diff --git a/src/helix/endpoints/clips/mod.rs b/src/helix/endpoints/clips/mod.rs index 572b14ab35..8ba3a29db6 100644 --- a/src/helix/endpoints/clips/mod.rs +++ b/src/helix/endpoints/clips/mod.rs @@ -20,7 +20,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_clips; diff --git a/src/helix/endpoints/eventsub/mod.rs b/src/helix/endpoints/eventsub/mod.rs index 065da66c58..8f9b7403bf 100644 --- a/src/helix/endpoints/eventsub/mod.rs +++ b/src/helix/endpoints/eventsub/mod.rs @@ -4,7 +4,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod create_eventsub_subscription; diff --git a/src/helix/endpoints/games/mod.rs b/src/helix/endpoints/games/mod.rs index 8eb8900916..4364ab9814 100644 --- a/src/helix/endpoints/games/mod.rs +++ b/src/helix/endpoints/games/mod.rs @@ -3,7 +3,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_games; diff --git a/src/helix/endpoints/goals/mod.rs b/src/helix/endpoints/goals/mod.rs index 768067b13d..fa742bcc07 100644 --- a/src/helix/endpoints/goals/mod.rs +++ b/src/helix/endpoints/goals/mod.rs @@ -5,7 +5,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_creator_goals; diff --git a/src/helix/endpoints/hypetrain/mod.rs b/src/helix/endpoints/hypetrain/mod.rs index 809a59ddbe..ad4dbbb112 100644 --- a/src/helix/endpoints/hypetrain/mod.rs +++ b/src/helix/endpoints/hypetrain/mod.rs @@ -5,7 +5,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_hypetrain_events; diff --git a/src/helix/endpoints/moderation/get_shield_mode_status.rs b/src/helix/endpoints/moderation/get_shield_mode_status.rs index a56b9eb010..297c7969e4 100644 --- a/src/helix/endpoints/moderation/get_shield_mode_status.rs +++ b/src/helix/endpoints/moderation/get_shield_mode_status.rs @@ -82,7 +82,7 @@ pub struct ShieldModeStatus { pub last_shield_mode: Option, } -impl<'de> Deserialize<'de> for ShieldModeStatus { +impl<'de> serde::Deserialize<'de> for ShieldModeStatus { fn deserialize(deserializer: D) -> Result where D: serde::Deserializer<'de> { #[derive(Deserialize)] diff --git a/src/helix/endpoints/moderation/mod.rs b/src/helix/endpoints/moderation/mod.rs index 9b5f6019ba..23174f491f 100644 --- a/src/helix/endpoints/moderation/mod.rs +++ b/src/helix/endpoints/moderation/mod.rs @@ -5,7 +5,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod add_blocked_term; diff --git a/src/helix/endpoints/points/mod.rs b/src/helix/endpoints/points/mod.rs index fc8ebf3f28..7373096bda 100644 --- a/src/helix/endpoints/points/mod.rs +++ b/src/helix/endpoints/points/mod.rs @@ -24,7 +24,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod create_custom_rewards; @@ -51,7 +51,7 @@ pub use update_redemption_status::{ UpdateRedemptionStatusBody, UpdateRedemptionStatusInformation, UpdateRedemptionStatusRequest, }; /// Custom reward redemption statuses: UNFULFILLED, FULFILLED or CANCELED -#[derive(PartialEq, Eq, serde::Serialize, serde::Deserialize, Copy, Clone, Debug)] +#[derive(PartialEq, Eq, Serialize, Deserialize, Copy, Clone, Debug)] #[non_exhaustive] pub enum CustomRewardRedemptionStatus { /// Unfulfilled reward - the user has claimed it but it is still pending. diff --git a/src/helix/endpoints/polls/mod.rs b/src/helix/endpoints/polls/mod.rs index 2f4bdf2f79..2222f9f1ed 100644 --- a/src/helix/endpoints/polls/mod.rs +++ b/src/helix/endpoints/polls/mod.rs @@ -5,7 +5,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod create_poll; diff --git a/src/helix/endpoints/predictions/mod.rs b/src/helix/endpoints/predictions/mod.rs index 5b58a8f011..75c8c54c16 100644 --- a/src/helix/endpoints/predictions/mod.rs +++ b/src/helix/endpoints/predictions/mod.rs @@ -4,7 +4,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod create_prediction; diff --git a/src/helix/endpoints/raids/mod.rs b/src/helix/endpoints/raids/mod.rs index c211a295c6..224acf4fe3 100644 --- a/src/helix/endpoints/raids/mod.rs +++ b/src/helix/endpoints/raids/mod.rs @@ -4,7 +4,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod cancel_a_raid; diff --git a/src/helix/endpoints/schedule/mod.rs b/src/helix/endpoints/schedule/mod.rs index 6bceba2725..079c544eaf 100644 --- a/src/helix/endpoints/schedule/mod.rs +++ b/src/helix/endpoints/schedule/mod.rs @@ -3,7 +3,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod create_channel_stream_schedule_segment; diff --git a/src/helix/endpoints/search/mod.rs b/src/helix/endpoints/search/mod.rs index 79f074bf87..9c71b19e43 100644 --- a/src/helix/endpoints/search/mod.rs +++ b/src/helix/endpoints/search/mod.rs @@ -21,7 +21,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod search_categories; diff --git a/src/helix/endpoints/streams/mod.rs b/src/helix/endpoints/streams/mod.rs index 3f1068a692..31ddea166f 100644 --- a/src/helix/endpoints/streams/mod.rs +++ b/src/helix/endpoints/streams/mod.rs @@ -23,7 +23,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; #[doc(inline)] diff --git a/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs b/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs index 5458c47548..c83f56f3fc 100644 --- a/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs +++ b/src/helix/endpoints/subscriptions/get_broadcaster_subscriptions_events.rs @@ -170,6 +170,8 @@ pub struct BroadcasterSubscriptionEventData { /// Deserialize [`SubscriptionTier::Other("")`](types::SubscriptionTier::Other) as [`Option::None`] fn subscription_tier<'de, D>(deserializer: D) -> Result, D::Error> where D: serde::de::Deserializer<'de> { + use serde::Deserialize; + Ok(match types::SubscriptionTier::deserialize(deserializer)? { types::SubscriptionTier::Other(s) if s.is_empty() => None, other => Some(other), diff --git a/src/helix/endpoints/subscriptions/mod.rs b/src/helix/endpoints/subscriptions/mod.rs index f92ab4ad47..a7ce12820c 100644 --- a/src/helix/endpoints/subscriptions/mod.rs +++ b/src/helix/endpoints/subscriptions/mod.rs @@ -22,7 +22,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod check_user_subscription; diff --git a/src/helix/endpoints/tags/mod.rs b/src/helix/endpoints/tags/mod.rs index 4a058b832a..595768d582 100644 --- a/src/helix/endpoints/tags/mod.rs +++ b/src/helix/endpoints/tags/mod.rs @@ -22,7 +22,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; use std::collections::HashMap; diff --git a/src/helix/endpoints/teams/mod.rs b/src/helix/endpoints/teams/mod.rs index f6f334ae5d..eb78e683c0 100644 --- a/src/helix/endpoints/teams/mod.rs +++ b/src/helix/endpoints/teams/mod.rs @@ -4,7 +4,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod get_channel_teams; diff --git a/src/helix/endpoints/users/mod.rs b/src/helix/endpoints/users/mod.rs index 9007f03d01..12e0ed9c4e 100644 --- a/src/helix/endpoints/users/mod.rs +++ b/src/helix/endpoints/users/mod.rs @@ -23,7 +23,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod block_user; diff --git a/src/helix/endpoints/videos/mod.rs b/src/helix/endpoints/videos/mod.rs index 5615b13142..66c72327b9 100644 --- a/src/helix/endpoints/videos/mod.rs +++ b/src/helix/endpoints/videos/mod.rs @@ -22,7 +22,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod delete_videos; diff --git a/src/helix/endpoints/whispers/mod.rs b/src/helix/endpoints/whispers/mod.rs index fc2d53d1cb..2b375a6cc1 100644 --- a/src/helix/endpoints/whispers/mod.rs +++ b/src/helix/endpoints/whispers/mod.rs @@ -5,7 +5,7 @@ use crate::{ helix::{self, Request}, types, }; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; use std::borrow::Cow; pub mod send_whisper; diff --git a/src/helix/mod.rs b/src/helix/mod.rs index 9dc3b39d4d..78a40c4693 100644 --- a/src/helix/mod.rs +++ b/src/helix/mod.rs @@ -28,7 +28,7 @@ //! # } //! ``` -use serde::Deserialize; +use serde_derive::Deserialize; #[doc(no_inline)] #[cfg(feature = "twitch_oauth2")] pub use twitch_oauth2::Scope; diff --git a/src/helix/ser.rs b/src/helix/ser.rs index 66409ca3b3..07d263e7e9 100644 --- a/src/helix/ser.rs +++ b/src/helix/ser.rs @@ -942,13 +942,13 @@ impl ser::Serializer for ValueSerializer { #[cfg(test)] #[test] fn serialize_query() { - #[derive(serde::Serialize)] + #[derive(serde_derive::Serialize)] #[serde(rename_all = "lowercase")] pub enum Variant { Hello, World, } - #[derive(serde::Serialize)] + #[derive(serde_derive::Serialize)] struct Request { filter: String, maybe: Option, diff --git a/src/pubsub/automod_queue.rs b/src/pubsub/automod_queue.rs index 8056c8414a..9cdd310aa4 100644 --- a/src/pubsub/automod_queue.rs +++ b/src/pubsub/automod_queue.rs @@ -1,6 +1,6 @@ //! PubSub messages for when AutoMod flags a message as potentially inappropriate, and when a moderator takes action on a message. use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user follows the channel #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/channel_bits.rs b/src/pubsub/channel_bits.rs index 962246a03c..5fe736001c 100644 --- a/src/pubsub/channel_bits.rs +++ b/src/pubsub/channel_bits.rs @@ -2,7 +2,7 @@ #![doc(alias = "channel-bits-events-v2")] //! PubSub messages for bits use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// Anyone cheers in a specified channel. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)] diff --git a/src/pubsub/channel_bits_badge.rs b/src/pubsub/channel_bits_badge.rs index 91ecb81b85..127264b744 100644 --- a/src/pubsub/channel_bits_badge.rs +++ b/src/pubsub/channel_bits_badge.rs @@ -1,7 +1,7 @@ #![doc(alias = "channel-bits-badge-unlocks")] //! PubSub messages for bits use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// Anyone shares a bit badge in a specified channel. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)] diff --git a/src/pubsub/channel_cheer.rs b/src/pubsub/channel_cheer.rs index b2450aae1f..bf021bd086 100644 --- a/src/pubsub/channel_cheer.rs +++ b/src/pubsub/channel_cheer.rs @@ -2,7 +2,7 @@ #![doc(alias = "channel-cheer-events-public-v1")] //! PubSub messages for cheer events use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user redeems a cheer with shared rewards. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/channel_points.rs b/src/pubsub/channel_points.rs index d726b216c3..8456995e42 100644 --- a/src/pubsub/channel_points.rs +++ b/src/pubsub/channel_points.rs @@ -2,7 +2,7 @@ #![doc(alias = "channel-points-channel-v1")] //! PubSub messages for channel points use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user redeems an reward using channel points. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/channel_sub_gifts.rs b/src/pubsub/channel_sub_gifts.rs index 0354fcb011..318a84d249 100644 --- a/src/pubsub/channel_sub_gifts.rs +++ b/src/pubsub/channel_sub_gifts.rs @@ -2,7 +2,7 @@ #![doc(alias = "channel-sub-gifts-v1")] //! PubSub messages for sub gifts use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user gifts subs. /// diff --git a/src/pubsub/channel_subscriptions.rs b/src/pubsub/channel_subscriptions.rs index 9695b30205..f73719522d 100644 --- a/src/pubsub/channel_subscriptions.rs +++ b/src/pubsub/channel_subscriptions.rs @@ -3,7 +3,7 @@ #![doc(alias = "channel-subscribe-events-v1")] //! PubSub messages for subscriptions use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A subscription event happens in channel #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/community_points.rs b/src/pubsub/community_points.rs index 996d479ce4..bfac2e95f8 100644 --- a/src/pubsub/community_points.rs +++ b/src/pubsub/community_points.rs @@ -3,7 +3,7 @@ //! //! See also [`pubsub::channel_points`] use crate::pubsub; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user redeems an reward using channel points. /// diff --git a/src/pubsub/following.rs b/src/pubsub/following.rs index fefa6964bf..dae43c1f4b 100644 --- a/src/pubsub/following.rs +++ b/src/pubsub/following.rs @@ -2,7 +2,7 @@ #![doc(alias = "follows")] //! PubSub messages for follows use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user follows the channel #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/hypetrain.rs b/src/pubsub/hypetrain.rs index 93dcdea364..b9c1f90189 100644 --- a/src/pubsub/hypetrain.rs +++ b/src/pubsub/hypetrain.rs @@ -1,7 +1,7 @@ #![doc(alias = "hype-train-events-v1")] //! PubSub messages for hype-trains use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user redeems an reward using channel points. #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/mod.rs b/src/pubsub/mod.rs index 7efcc45f03..37800c8abf 100644 --- a/src/pubsub/mod.rs +++ b/src/pubsub/mod.rs @@ -80,7 +80,8 @@ macro_rules! impl_de_ser { }; } -use serde::{Deserialize, Deserializer, Serialize}; +use serde::Deserializer; +use serde_derive::{Deserialize, Serialize}; pub mod automod_queue; pub mod channel_bits; @@ -109,7 +110,7 @@ use crate::parse_json; /// A logical partition of messages that clients may subscribe to, to get messages. /// /// also known as event -pub trait Topic: Serialize + Into { +pub trait Topic: serde::Serialize + Into { /// Scopes needed by this topic /// /// This constant @@ -482,7 +483,7 @@ pub enum TopicData { } // This impl is here because otherwise we hide the errors from deser -impl<'de> Deserialize<'de> for TopicData { +impl<'de> serde::Deserialize<'de> for TopicData { fn deserialize>(deserializer: D) -> Result { // FIXME: make into macro or actually upstream into serde..., untagged_force = "field" @@ -605,7 +606,9 @@ impl Response { fn deserialize_default_from_null<'de, D, T>(deserializer: D) -> Result where D: Deserializer<'de>, - T: Deserialize<'de> + Default, { + T: serde::Deserialize<'de> + Default, { + use serde::Deserialize; + Ok(Option::deserialize(deserializer)?.unwrap_or_default()) } diff --git a/src/pubsub/moderation.rs b/src/pubsub/moderation.rs index 7f6fcbbe0f..2ace49e1f4 100644 --- a/src/pubsub/moderation.rs +++ b/src/pubsub/moderation.rs @@ -3,7 +3,7 @@ #![allow(deprecated)] //! PubSub messages for moderator actions use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A moderator performs an action in the channel. #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)] @@ -337,7 +337,10 @@ pub enum ChannelAction { } impl std::fmt::Display for ModerationActionCommand { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.serialize(f) } + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + use serde::Serialize; + self.serialize(f) + } } /// Moderation type diff --git a/src/pubsub/raid.rs b/src/pubsub/raid.rs index 2591b43749..39703abdf5 100644 --- a/src/pubsub/raid.rs +++ b/src/pubsub/raid.rs @@ -1,7 +1,7 @@ #![doc(alias = "raids")] //! PubSub messages for raids use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user raids the channel #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/user_moderation_notifications.rs b/src/pubsub/user_moderation_notifications.rs index db96a35ef4..df2656ae3a 100644 --- a/src/pubsub/user_moderation_notifications.rs +++ b/src/pubsub/user_moderation_notifications.rs @@ -1,6 +1,6 @@ //! PubSub messages for user moderation notifications use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// A user follows the channel #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] diff --git a/src/pubsub/video_playback.rs b/src/pubsub/video_playback.rs index 95f7ba821d..5ba09b3098 100644 --- a/src/pubsub/video_playback.rs +++ b/src/pubsub/video_playback.rs @@ -6,7 +6,7 @@ #![doc(alias = "video-playback")] //! PubSub messages for (live) stream playback information use crate::{pubsub, types}; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// Statistics about stream #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Hash)] diff --git a/src/tmi/mod.rs b/src/tmi/mod.rs index d745ecde34..2a1b20c9c8 100644 --- a/src/tmi/mod.rs +++ b/src/tmi/mod.rs @@ -2,7 +2,7 @@ #![allow(deprecated)] //! TMI Endpoint, twitch's unsupported api for better chatters retrieval use crate::types; -use serde::{Deserialize, Serialize}; +use serde_derive::{Deserialize, Serialize}; /// Client for the twitch TMI endpoint, almost entirely undocumented and certainly not supported. /// /// # Examples diff --git a/twitch_types b/twitch_types index a99bd34058..7be44c1b6d 160000 --- a/twitch_types +++ b/twitch_types @@ -1 +1 @@ -Subproject commit a99bd34058c03abebbd23be264e1ea3728c89455 +Subproject commit 7be44c1b6d972300a827ae8b1e30887599609689 diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml index db1465c206..c625832f4f 100644 --- a/xtask/Cargo.toml +++ b/xtask/Cargo.toml @@ -12,4 +12,5 @@ color-eyre = "0.6.2" xshell = "0.2.5" once_cell = "1.18" serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1.0" } +serde_derive = { version = "1.0" } diff --git a/xtask/src/main.rs b/xtask/src/main.rs index d09c78cbcf..fdfc0a67ef 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -180,7 +180,7 @@ fn pkgid() -> Result { /// Returns the cargo workspace for the manifest pub fn get_cargo_workspace() -> &'static Path { static WORKSPACE: OnceCell = OnceCell::new(); - #[derive(Debug, Deserialize)] + #[derive(Debug, serde_derive::Deserialize)] pub struct CargoMetadata { pub workspace_root: PathBuf, }