2
2
use halfbrown:: hashmap;
3
3
use serde:: Serialize ;
4
4
#[ cfg( not( feature = "simd-json" ) ) ]
5
- use serde_json:: Value as OwnedValue ;
5
+ use serde_json:: { to_string , Value as OwnedValue } ;
6
6
#[ cfg( feature = "simd-json" ) ]
7
- use simd_json:: OwnedValue ;
7
+ use simd_json:: { to_string , OwnedValue } ;
8
8
use twilight_cache_inmemory:: { DefaultCacheModels , InMemoryCache , InMemoryCacheStats , UpdateCache } ;
9
9
use twilight_model:: {
10
10
channel:: { message:: Sticker , Channel , StageInstance } ,
11
11
gateway:: {
12
- payload:: incoming:: GuildCreate ,
12
+ payload:: incoming:: GuildDelete ,
13
13
presence:: { Presence , UserOrId } ,
14
14
OpCode ,
15
15
} ,
16
- guild:: { scheduled_event:: GuildScheduledEvent , Emoji , Guild , Member , Role , UnavailableGuild } ,
16
+ guild:: { scheduled_event:: GuildScheduledEvent , Emoji , Guild , Member , Role } ,
17
17
id:: {
18
18
marker:: { GuildMarker , UserMarker } ,
19
19
Id ,
@@ -26,20 +26,13 @@ use std::sync::Arc;
26
26
use crate :: model:: JsonObject ;
27
27
28
28
#[ derive( Serialize ) ]
29
- pub struct Payload {
30
- pub d : Event ,
29
+ pub struct Payload < T > {
30
+ pub d : T ,
31
31
pub op : OpCode ,
32
- pub t : String ,
32
+ pub t : & ' static str ,
33
33
pub s : usize ,
34
34
}
35
35
36
- #[ derive( Serialize , Clone ) ]
37
- #[ serde( untagged) ]
38
- pub enum Event {
39
- Ready ( JsonObject ) ,
40
- GuildCreate ( Box < GuildCreate > ) ,
41
- }
42
-
43
36
pub struct Guilds ( Arc < InMemoryCache > ) ;
44
37
45
38
impl Guilds {
@@ -55,7 +48,11 @@ impl Guilds {
55
48
self . 0 . stats ( )
56
49
}
57
50
58
- pub fn get_ready_payload ( & self , mut ready : JsonObject , sequence : & mut usize ) -> Payload {
51
+ pub fn get_ready_payload (
52
+ & self ,
53
+ mut ready : JsonObject ,
54
+ sequence : & mut usize ,
55
+ ) -> Payload < JsonObject > {
59
56
* sequence += 1 ;
60
57
61
58
let guild_id_to_json = |guild_id : Id < GuildMarker > | {
@@ -94,9 +91,9 @@ impl Guilds {
94
91
ready. insert ( String :: from ( "guilds" ) , OwnedValue :: Array ( guilds) ) ;
95
92
96
93
Payload {
97
- d : Event :: Ready ( ready) ,
94
+ d : ready,
98
95
op : OpCode :: Dispatch ,
99
- t : String :: from ( "READY" ) ,
96
+ t : "READY" ,
100
97
s : * sequence,
101
98
}
102
99
}
@@ -323,15 +320,21 @@ impl Guilds {
323
320
pub fn get_guild_payloads < ' a > (
324
321
& ' a self ,
325
322
sequence : & ' a mut usize ,
326
- ) -> impl Iterator < Item = Payload > + ' a {
323
+ ) -> impl Iterator < Item = String > + ' a {
327
324
self . 0 . iter ( ) . guilds ( ) . map ( move |guild| {
328
325
* sequence += 1 ;
329
326
330
- let guild_create = if guild. unavailable ( ) {
331
- GuildCreate :: Unavailable ( UnavailableGuild {
332
- id : guild. id ( ) ,
333
- unavailable : true ,
327
+ if guild. unavailable ( ) {
328
+ to_string ( & Payload {
329
+ d : GuildDelete {
330
+ id : guild. id ( ) ,
331
+ unavailable : true ,
332
+ } ,
333
+ op : OpCode :: Dispatch ,
334
+ t : "GUILD_DELETE" ,
335
+ s : * sequence,
334
336
} )
337
+ . unwrap ( )
335
338
} else {
336
339
let guild_channels = self . channels_in_guild ( guild. id ( ) ) ;
337
340
let presences = self . presences_in_guild ( guild. id ( ) ) ;
@@ -397,14 +400,13 @@ impl Guilds {
397
400
widget_enabled : guild. widget_enabled ( ) ,
398
401
} ;
399
402
400
- GuildCreate :: Available ( new_guild)
401
- } ;
402
-
403
- Payload {
404
- d : Event :: GuildCreate ( Box :: new ( guild_create) ) ,
405
- op : OpCode :: Dispatch ,
406
- t : String :: from ( "GUILD_CREATE" ) ,
407
- s : * sequence,
403
+ to_string ( & Payload {
404
+ d : new_guild,
405
+ op : OpCode :: Dispatch ,
406
+ t : "GUILD_CREATE" ,
407
+ s : * sequence,
408
+ } )
409
+ . unwrap ( )
408
410
}
409
411
} )
410
412
}
0 commit comments