From 93e26506c0211a3ebefa958e1df0d8cfbfc12b03 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Wed, 9 Apr 2025 02:11:48 +0500 Subject: upd: function signatures for RetrieveEmoteWS --- src/betterttv.rs | 56 ++++++++++++++++++++++++++++---------------------------- src/emotes.rs | 11 +++++++---- src/seventv.rs | 56 ++++++++++++++++++++++++++++---------------------------- 3 files changed, 63 insertions(+), 60 deletions(-) (limited to 'src') diff --git a/src/betterttv.rs b/src/betterttv.rs index 07dae2c..2d8134b 100644 --- a/src/betterttv.rs +++ b/src/betterttv.rs @@ -94,17 +94,40 @@ impl RetrieveEmoteAPI for BetterTTVAPIClient { } } -pub struct BetterTTVWSClient { +pub struct BetterTTVWSClient +where + F: Fn(String, Option, Emote), +{ url: String, - on_emote_create: Option, Emote) + Send + Sync>>, - on_emote_update: Option, Emote) + Send + Sync>>, - on_emote_delete: Option, Emote) + Send + Sync>>, + on_emote_create: Option, + on_emote_update: Option, + on_emote_delete: Option, joined_channels: HashSet, awaiting_channels: HashSet, } -impl BetterTTVWSClient { +impl RetrieveEmoteWS for BetterTTVWSClient +where + F: Fn(String, Option, Emote), +{ + fn on_emote_create(&mut self, func: F) { + self.on_emote_create = Some(func); + } + + fn on_emote_update(&mut self, func: F) { + self.on_emote_update = Some(func); + } + + fn on_emote_delete(&mut self, func: F) { + self.on_emote_delete = Some(func); + } +} + +impl BetterTTVWSClient +where + F: Fn(String, Option, Emote), +{ pub async fn new() -> Result<(WebSocketStream>, Self)> { let url = "wss://sockets.betterttv.net/ws"; @@ -259,26 +282,3 @@ impl BetterTTVWSClient { self.joined_channels.clear(); } } - -impl RetrieveEmoteWS for BetterTTVWSClient { - fn on_emote_create( - &mut self, - func: &'static (dyn Fn(String, Option, Emote) + Send + Sync), - ) { - self.on_emote_create = Some(Box::new(func)); - } - - fn on_emote_update( - &mut self, - func: &'static (dyn Fn(String, Option, Emote) + Send + Sync), - ) { - self.on_emote_update = Some(Box::new(func)); - } - - fn on_emote_delete( - &mut self, - func: &'static (dyn Fn(String, Option, Emote) + Send + Sync), - ) { - self.on_emote_delete = Some(Box::new(func)); - } -} diff --git a/src/emotes.rs b/src/emotes.rs index 1fa932c..53fd5ad 100644 --- a/src/emotes.rs +++ b/src/emotes.rs @@ -33,8 +33,11 @@ pub trait RetrieveEmoteAPI { async fn get_global_emotes(&self) -> Result, Error>; } -pub trait RetrieveEmoteWS { - fn on_emote_create(&mut self, func: &'static (dyn Fn(String, Option, T) + Send + Sync)); - fn on_emote_update(&mut self, func: &'static (dyn Fn(String, Option, T) + Send + Sync)); - fn on_emote_delete(&mut self, func: &'static (dyn Fn(String, Option, T) + Send + Sync)); +pub trait RetrieveEmoteWS +where + F: Fn(String, Option, T), +{ + fn on_emote_create(&mut self, func: F); + fn on_emote_update(&mut self, func: F); + fn on_emote_delete(&mut self, func: F); } diff --git a/src/seventv.rs b/src/seventv.rs index dd4a939..fd44aeb 100644 --- a/src/seventv.rs +++ b/src/seventv.rs @@ -193,11 +193,14 @@ impl RetrieveEmoteAPI for SevenTVAPIClient { } } -pub struct SevenTVWSClient { +pub struct SevenTVWSClient +where + F: Fn(String, Option, Emote), +{ url: String, - on_emote_create: Option, Emote) + Send + Sync>>, - on_emote_update: Option, Emote) + Send + Sync>>, - on_emote_delete: Option, Emote) + Send + Sync>>, + on_emote_create: Option, + on_emote_update: Option, + on_emote_delete: Option, joined_channels: HashSet, awaiting_channels: HashSet, @@ -205,7 +208,27 @@ pub struct SevenTVWSClient { identified: bool, } -impl SevenTVWSClient { +impl RetrieveEmoteWS for SevenTVWSClient +where + F: Fn(String, Option, Emote), +{ + fn on_emote_create(&mut self, func: F) { + self.on_emote_create = Some(func); + } + + fn on_emote_update(&mut self, func: F) { + self.on_emote_update = Some(func); + } + + fn on_emote_delete(&mut self, func: F) { + self.on_emote_delete = Some(func); + } +} + +impl SevenTVWSClient +where + F: Fn(String, Option, Emote), +{ pub async fn new() -> Result<(WebSocketStream>, Self)> { let url = "wss://events.7tv.io/v3"; @@ -415,26 +438,3 @@ impl SevenTVWSClient { self.joined_channels.clear(); } } - -impl RetrieveEmoteWS for SevenTVWSClient { - fn on_emote_create( - &mut self, - func: &'static (dyn Fn(String, Option, Emote) + Send + Sync), - ) { - self.on_emote_create = Some(Box::new(func)); - } - - fn on_emote_update( - &mut self, - func: &'static (dyn Fn(String, Option, Emote) + Send + Sync), - ) { - self.on_emote_update = Some(Box::new(func)); - } - - fn on_emote_delete( - &mut self, - func: &'static (dyn Fn(String, Option, Emote) + Send + Sync), - ) { - self.on_emote_delete = Some(Box::new(func)); - } -} -- cgit v1.2.3