chorus 0.20.0

A library for interacting with multiple Spacebar-compatible Instances at once.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.

mod config {
    mod subconfigs {
        mod client {
            use chorus::types::types::subconfigs::client::ClientReleaseConfiguration;

            #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
            #[cfg_attr(not(target_arch = "wasm32"), test)]
            fn client_release_configuration() {
                let _client_release_configuration = ClientReleaseConfiguration::default();
            }
        }

        mod limits {
            use chorus::types::types::subconfigs::limits::rates::RateLimits;

            #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
            #[cfg_attr(not(target_arch = "wasm32"), test)]
            fn rates() {
                let rate_limits = RateLimits::default();
                let hash_map = rate_limits.to_hash_map();
                assert!(hash_map.contains_key(&chorus::types::LimitType::ChannelBaseline));
                assert!(hash_map.contains_key(&chorus::types::LimitType::GuildBaseline));
                assert!(hash_map.contains_key(&chorus::types::LimitType::AuthLogin));
                assert!(hash_map.contains_key(&chorus::types::LimitType::AuthRegister));
                assert!(hash_map.contains_key(&chorus::types::LimitType::Error));
                assert!(hash_map.contains_key(&chorus::types::LimitType::Global));
                assert!(hash_map.contains_key(&chorus::types::LimitType::Ip));
                assert!(hash_map.contains_key(&chorus::types::LimitType::WebhookBaseline));
                assert!(hash_map.len() == 8)
            }
        }
    }

    mod guild_configuration {
        use std::ops::Deref;
        use std::str::FromStr;

        use chorus::types::types::guild_configuration::{GuildFeatures, GuildFeaturesList};
        use chorus::types::{Error, GuildError};

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn deref_guild_features_list() {
            let guild_features_list = &GuildFeaturesList::default();
            let _guild_features_list_deref = guild_features_list.deref().clone();
        }

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn test_deref_mut() {
            let mut guild_features_list = GuildFeaturesList::default();
            guild_features_list.clear();
            let mut list = GuildFeaturesList::default().to_vec();
            list.push(GuildFeatures::ActivitiesAlpha);
            *guild_features_list = list.to_vec();
            assert_eq!(guild_features_list.len(), 1);
        }

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn test_display() {
            let mut guild_features_list = GuildFeaturesList::default();
            guild_features_list.push(GuildFeatures::ActivitiesAlpha);
            guild_features_list.push(GuildFeatures::AnimatedBanner);
            assert_eq!(
                format!("{}", guild_features_list),
                "ACTIVITIES_ALPHA,ANIMATED_BANNER"
            );
        }

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn test_from_str() {
            // GPT moment
            assert_eq!(
                GuildFeatures::from_str("ACTIVITIES_ALPHA").unwrap(),
                GuildFeatures::ActivitiesAlpha
            );
            assert_eq!(
                GuildFeatures::from_str("ACTIVITIES_EMPLOYEE").unwrap(),
                GuildFeatures::ActivitiesEmployee
            );
            assert_eq!(
                GuildFeatures::from_str("ACTIVITIES_INTERNAL_DEV").unwrap(),
                GuildFeatures::ActivitiesInternalDev
            );
            assert_eq!(
                GuildFeatures::from_str("ANIMATED_BANNER").unwrap(),
                GuildFeatures::AnimatedBanner
            );
            assert_eq!(
                GuildFeatures::from_str("ANIMATED_ICON").unwrap(),
                GuildFeatures::AnimatedIcon
            );
            assert_eq!(
                GuildFeatures::from_str("APPLICATION_COMMAND_PERMISSIONS_V2").unwrap(),
                GuildFeatures::ApplicationCommandPermissionsV2
            );
            assert_eq!(
                GuildFeatures::from_str("AUTO_MODERATION").unwrap(),
                GuildFeatures::AutoModeration
            );
            assert_eq!(
                GuildFeatures::from_str("AUTO_MOD_TRIGGER_KEYWORD_FILTER").unwrap(),
                GuildFeatures::AutoModTriggerKeywordFilter
            );
            assert_eq!(
                GuildFeatures::from_str("AUTO_MOD_TRIGGER_ML_SPAM_FILTER").unwrap(),
                GuildFeatures::AutoModTriggerMLSpamFilter
            );
            assert_eq!(
                GuildFeatures::from_str("AUTO_MOD_TRIGGER_SPAM_LINK_FILTER").unwrap(),
                GuildFeatures::AutoModTriggerSpamLinkFilter
            );
            assert_eq!(
                GuildFeatures::from_str("AUTO_MOD_TRIGGER_USER_PROFILE").unwrap(),
                GuildFeatures::AutoModTriggerUserProfile
            );
            assert_eq!(
                GuildFeatures::from_str("BANNER").unwrap(),
                GuildFeatures::Banner
            );
            assert_eq!(GuildFeatures::from_str("BFG").unwrap(), GuildFeatures::Bfg);
            assert_eq!(
                GuildFeatures::from_str("BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD").unwrap(),
                GuildFeatures::BoostingTiersExperimentMediumGuild
            );
            assert_eq!(
                GuildFeatures::from_str("BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD").unwrap(),
                GuildFeatures::BoostingTiersExperimentSmallGuild
            );
            assert_eq!(
                GuildFeatures::from_str("BOT_DEVELOPER_EARLY_ACCESS").unwrap(),
                GuildFeatures::BotDeveloperEarlyAccess
            );
            assert_eq!(
                GuildFeatures::from_str("BURST_REACTIONS").unwrap(),
                GuildFeatures::BurstReactions
            );
            assert_eq!(
                GuildFeatures::from_str("COMMUNITY_CANARY").unwrap(),
                GuildFeatures::CommunityCanary
            );
            assert_eq!(
                GuildFeatures::from_str("COMMUNITY_EXP_LARGE_GATED").unwrap(),
                GuildFeatures::CommunityExpLargeGated
            );
            assert_eq!(
                GuildFeatures::from_str("COMMUNITY_EXP_LARGE_UNGATED").unwrap(),
                GuildFeatures::CommunityExpLargeUngated
            );
            assert_eq!(
                GuildFeatures::from_str("COMMUNITY_EXP_MEDIUM").unwrap(),
                GuildFeatures::CommunityExpMedium
            );
            assert_eq!(
                GuildFeatures::from_str("CHANNEL_EMOJIS_GENERATED").unwrap(),
                GuildFeatures::ChannelEmojisGenerated
            );
            assert_eq!(
                GuildFeatures::from_str("CHANNEL_HIGHLIGHTS").unwrap(),
                GuildFeatures::ChannelHighlights
            );
            assert_eq!(
                GuildFeatures::from_str("CHANNEL_HIGHLIGHTS_DISABLED").unwrap(),
                GuildFeatures::ChannelHighlightsDisabled
            );
            assert_eq!(
                GuildFeatures::from_str("CLYDE_ENABLED").unwrap(),
                GuildFeatures::ClydeEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("CLYDE_EXPERIMENT_ENABLED").unwrap(),
                GuildFeatures::ClydeExperimentEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("CLYDE_DISABLED").unwrap(),
                GuildFeatures::ClydeDisabled
            );
            assert_eq!(
                GuildFeatures::from_str("COMMUNITY").unwrap(),
                GuildFeatures::Community
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_ACCEPTED_NEW_TERMS").unwrap(),
                GuildFeatures::CreatorAcceptedNewTerms
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE").unwrap(),
                GuildFeatures::CreatorMonetizable
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE_DISABLED").unwrap(),
                GuildFeatures::CreatorMonetizableDisabled
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING")
                    .unwrap(),
                GuildFeatures::CreatorMonetizablePendingNewOwnerOnboarding
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE_PROVISIONAL").unwrap(),
                GuildFeatures::CreatorMonetizableProvisional
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE_RESTRICTED").unwrap(),
                GuildFeatures::CreatorMonetizableRestricted
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE_WHITEGLOVE").unwrap(),
                GuildFeatures::CreatorMonetizableWhiteglove
            );
            assert_eq!(
                GuildFeatures::from_str("CREATOR_MONETIZABLE_APPLICATION_ALLOWLIST").unwrap(),
                GuildFeatures::CreatorMonetizableApplicationAllowlist
            );
            assert_eq!(
                GuildFeatures::from_str("CREATE_STORE_PAGE").unwrap(),
                GuildFeatures::CreateStorePage
            );
            assert_eq!(
                GuildFeatures::from_str("DEVELOPER_SUPPORT_SERVER").unwrap(),
                GuildFeatures::DeveloperSupportServer
            );
            assert_eq!(
                GuildFeatures::from_str("DISCOVERABLE_DISABLED").unwrap(),
                GuildFeatures::DiscoverableDisabled
            );
            assert_eq!(
                GuildFeatures::from_str("DISCOVERABLE").unwrap(),
                GuildFeatures::Discoverable
            );
            assert_eq!(
                GuildFeatures::from_str("ENABLED_DISCOVERABLE_BEFORE").unwrap(),
                GuildFeatures::EnabledDiscoverableBefore
            );
            assert_eq!(
                GuildFeatures::from_str("EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT").unwrap(),
                GuildFeatures::ExposedToActivitiesWTPExperiment
            );
            assert_eq!(
                GuildFeatures::from_str("GUESTS_ENABLED").unwrap(),
                GuildFeatures::GuestsEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_AUTOMOD_DEFAULT_LIST").unwrap(),
                GuildFeatures::GuildAutomodDefaultList
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_COMMUNICATION_DISABLED_GUILDS").unwrap(),
                GuildFeatures::GuildCommunicationDisabledGuilds
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_HOME_DEPRECATION_OVERRIDE").unwrap(),
                GuildFeatures::GuildHomeDeprecationOverride
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_HOME_OVERRIDE").unwrap(),
                GuildFeatures::GuildHomeOverride
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_HOME_TEST").unwrap(),
                GuildFeatures::GuildHomeTest
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_MEMBER_VERIFICATION_EXPERIMENT").unwrap(),
                GuildFeatures::GuildMemberVerificationExperiment
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ONBOARDING").unwrap(),
                GuildFeatures::GuildOnboarding
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ONBOARDING_ADMIN_ONLY").unwrap(),
                GuildFeatures::GuildOnboardingAdminOnly
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ONBOARDING_EVER_ENABLED").unwrap(),
                GuildFeatures::GuildOnboardingEverEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ONBOARDING_HAS_PROMPTS").unwrap(),
                GuildFeatures::GuildOnboardingHasPrompts
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ROLE_SUBSCRIPTION").unwrap(),
                GuildFeatures::GuildRoleSubscription
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ROLE_SUBSCRIPTION_PURCHASE_FEEDBACK_LOOP").unwrap(),
                GuildFeatures::GuildRoleSubscriptionPurchaseFeedbackLoop
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_ROLE_SUBSCRIPTION_TRIALS").unwrap(),
                GuildFeatures::GuildRoleSubscriptionTrials
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_SERVER_GUIDE").unwrap(),
                GuildFeatures::GuildServerGuide
            );
            assert_eq!(
                GuildFeatures::from_str("GUILD_WEB_PAGE_VANITY_URL").unwrap(),
                GuildFeatures::GuildWebPageVanityURL
            );
            assert_eq!(
                GuildFeatures::from_str("HAD_EARLY_ACTIVITIES_ACCESS").unwrap(),
                GuildFeatures::HadEarlyActivitiesAccess
            );
            assert_eq!(
                GuildFeatures::from_str("HAS_DIRECTORY_ENTRY").unwrap(),
                GuildFeatures::HasDirectoryEntry
            );
            assert_eq!(
                GuildFeatures::from_str("HIDE_FROM_EXPERIMENT_UI").unwrap(),
                GuildFeatures::HideFromExperimentUi
            );
            assert_eq!(GuildFeatures::from_str("HUB").unwrap(), GuildFeatures::Hub);
            assert_eq!(
                GuildFeatures::from_str("INCREASED_THREAD_LIMIT").unwrap(),
                GuildFeatures::IncreasedThreadLimit
            );
            assert_eq!(
                GuildFeatures::from_str("INTERNAL_EMPLOYEE_ONLY").unwrap(),
                GuildFeatures::InternalEmployeeOnly
            );
            assert_eq!(
                GuildFeatures::from_str("INVITE_SPLASH").unwrap(),
                GuildFeatures::InviteSplash
            );
            assert_eq!(
                GuildFeatures::from_str("INVITES_DISABLED").unwrap(),
                GuildFeatures::InvitesDisabled
            );
            assert_eq!(
                GuildFeatures::from_str("LINKED_TO_HUB").unwrap(),
                GuildFeatures::LinkedToHub
            );
            assert_eq!(
                GuildFeatures::from_str("MARKETPLACES_CONNECTION_ROLES").unwrap(),
                GuildFeatures::MarketplacesConnectionRoles
            );
            assert_eq!(
                GuildFeatures::from_str("MEMBER_PROFILES").unwrap(),
                GuildFeatures::MemberProfiles
            );
            assert_eq!(
                GuildFeatures::from_str("MEMBER_VERIFICATION_GATE_ENABLED").unwrap(),
                GuildFeatures::MemberVerificationGateEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("MEMBER_VERIFICATION_MANUAL_APPROVAL").unwrap(),
                GuildFeatures::MemberVerificationManualApproval
            );
            assert_eq!(
                GuildFeatures::from_str("MOBILE_WEB_ROLE_SUBSCRIPTION_PURCHASE_PAGE").unwrap(),
                GuildFeatures::MobileWebRoleSubscriptionPurchasePage
            );
            assert_eq!(
                GuildFeatures::from_str("MONETIZATION_ENABLED").unwrap(),
                GuildFeatures::MonetizationEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("MORE_EMOJI").unwrap(),
                GuildFeatures::MoreEmoji
            );
            assert_eq!(
                GuildFeatures::from_str("MORE_STICKERS").unwrap(),
                GuildFeatures::MoreStickers
            );
            assert_eq!(
                GuildFeatures::from_str("NEWS").unwrap(),
                GuildFeatures::News
            );
            assert_eq!(
                GuildFeatures::from_str("NEW_THREAD_PERMISSIONS").unwrap(),
                GuildFeatures::NewThreadPermissions
            );
            assert_eq!(
                GuildFeatures::from_str("PARTNERED").unwrap(),
                GuildFeatures::Partnered
            );
            assert_eq!(
                GuildFeatures::from_str("PREMIUM_TIER_3_OVERRIDE").unwrap(),
                GuildFeatures::PremiumTier3Override
            );
            assert_eq!(
                GuildFeatures::from_str("PREVIEW_ENABLED").unwrap(),
                GuildFeatures::PreviewEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("RAID_ALERTS_DISABLED").unwrap(),
                GuildFeatures::RaidAlertsDisabled
            );
            assert_eq!(
                GuildFeatures::from_str("RELAY_ENABLED").unwrap(),
                GuildFeatures::RelayEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("RESTRICT_SPAM_RISK_GUILD").unwrap(),
                GuildFeatures::RestrictSpamRiskGuild
            );
            assert_eq!(
                GuildFeatures::from_str("ROLE_ICONS").unwrap(),
                GuildFeatures::RoleIcons
            );
            assert_eq!(
                GuildFeatures::from_str("ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE").unwrap(),
                GuildFeatures::RoleSubscriptionsAvailableForPurchase
            );
            assert_eq!(
                GuildFeatures::from_str("ROLE_SUBSCRIPTIONS_ENABLED").unwrap(),
                GuildFeatures::RoleSubscriptionsEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("ROLE_SUBSCRIPTIONS_ENABLED_FOR_PURCHASE").unwrap(),
                GuildFeatures::RoleSubscriptionsEnabledForPurchase
            );
            assert_eq!(
                GuildFeatures::from_str("SHARD").unwrap(),
                GuildFeatures::Shard
            );
            assert_eq!(
                GuildFeatures::from_str("SHARED_CANVAS_FRIENDS_AND_FAMILY_TEST").unwrap(),
                GuildFeatures::SharedCanvasFriendsAndFamilyTest
            );
            assert_eq!(
                GuildFeatures::from_str("SOUNDBOARD").unwrap(),
                GuildFeatures::Soundboard
            );
            assert_eq!(
                GuildFeatures::from_str("SUMMARIES_ENABLED").unwrap(),
                GuildFeatures::SummariesEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("SUMMARIES_ENABLED_GA").unwrap(),
                GuildFeatures::SummariesEnabledGa
            );
            assert_eq!(
                GuildFeatures::from_str("SUMMARIES_DISABLED_BY_USER").unwrap(),
                GuildFeatures::SummariesDisabledByUser
            );
            assert_eq!(
                GuildFeatures::from_str("SUMMARIES_ENABLED_BY_USER").unwrap(),
                GuildFeatures::SummariesEnabledByUser
            );
            assert_eq!(
                GuildFeatures::from_str("TEXT_IN_STAGE_ENABLED").unwrap(),
                GuildFeatures::TextInStageEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("TEXT_IN_VOICE_ENABLED").unwrap(),
                GuildFeatures::TextInVoiceEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("THREADS_ENABLED_TESTING").unwrap(),
                GuildFeatures::ThreadsEnabledTesting
            );
            assert_eq!(
                GuildFeatures::from_str("THREADS_ENABLED").unwrap(),
                GuildFeatures::ThreadsEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("THREAD_DEFAULT_AUTO_ARCHIVE_DURATION").unwrap(),
                GuildFeatures::ThreadDefaultAutoArchiveDuration
            );
            assert_eq!(
                GuildFeatures::from_str("THREADS_ONLY_CHANNEL").unwrap(),
                GuildFeatures::ThreadsOnlyChannel
            );
            assert_eq!(
                GuildFeatures::from_str("TICKETED_EVENTS_ENABLED").unwrap(),
                GuildFeatures::TicketedEventsEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("TICKETING_ENABLED").unwrap(),
                GuildFeatures::TicketingEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("VANITY_URL").unwrap(),
                GuildFeatures::VanityUrl
            );
            assert_eq!(
                GuildFeatures::from_str("VERIFIED").unwrap(),
                GuildFeatures::Verified
            );
            assert_eq!(
                GuildFeatures::from_str("VIP_REGIONS").unwrap(),
                GuildFeatures::VipRegions
            );
            assert_eq!(
                GuildFeatures::from_str("VOICE_CHANNEL_EFFECTS").unwrap(),
                GuildFeatures::VoiceChannelEffects
            );
            assert_eq!(
                GuildFeatures::from_str("WELCOME_SCREEN_ENABLED").unwrap(),
                GuildFeatures::WelcomeScreenEnabled
            );
            assert_eq!(
                GuildFeatures::from_str("ALIASABLE_NAMES").unwrap(),
                GuildFeatures::AliasableNames
            );
            assert_eq!(
                GuildFeatures::from_str("ALLOW_INVALID_CHANNEL_NAME").unwrap(),
                GuildFeatures::AllowInvalidChannelName
            );
            assert_eq!(
                GuildFeatures::from_str("ALLOW_UNNAMED_CHANNELS").unwrap(),
                GuildFeatures::AllowUnnamedChannels
            );
            assert_eq!(
                GuildFeatures::from_str("CROSS_CHANNEL_REPLIES").unwrap(),
                GuildFeatures::CrossChannelReplies
            );
            assert_eq!(
                GuildFeatures::from_str("IRC_LIKE_CATEGORY_NAMES").unwrap(),
                GuildFeatures::IrcLikeCategoryNames
            );
            assert_eq!(
                GuildFeatures::from_str("INVITES_CLOSED").unwrap(),
                GuildFeatures::InvitesClosed
            );
            assert_eq!(
                GuildFeatures::from_str("INVALID").unwrap_err().to_string(),
                Error::Guild(GuildError::InvalidGuildFeature).to_string()
            );
        }

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn test_to_str() {
            assert_eq!(GuildFeatures::ActivitiesAlpha.to_str(), "ACTIVITIES_ALPHA");
            assert_eq!(
                GuildFeatures::ActivitiesEmployee.to_str(),
                "ACTIVITIES_EMPLOYEE"
            );
            assert_eq!(
                GuildFeatures::ActivitiesInternalDev.to_str(),
                "ACTIVITIES_INTERNAL_DEV"
            );
            assert_eq!(GuildFeatures::AnimatedBanner.to_str(), "ANIMATED_BANNER");
            assert_eq!(GuildFeatures::AnimatedIcon.to_str(), "ANIMATED_ICON");
            assert_eq!(
                GuildFeatures::ApplicationCommandPermissionsV2.to_str(),
                "APPLICATION_COMMAND_PERMISSIONS_V2"
            );
            assert_eq!(GuildFeatures::AutoModeration.to_str(), "AUTO_MODERATION");
            assert_eq!(
                GuildFeatures::AutoModTriggerKeywordFilter.to_str(),
                "AUTO_MOD_TRIGGER_KEYWORD_FILTER"
            );
            assert_eq!(
                GuildFeatures::AutoModTriggerMLSpamFilter.to_str(),
                "AUTO_MOD_TRIGGER_ML_SPAM_FILTER"
            );
            assert_eq!(
                GuildFeatures::AutoModTriggerSpamLinkFilter.to_str(),
                "AUTO_MOD_TRIGGER_SPAM_LINK_FILTER"
            );
            assert_eq!(
                GuildFeatures::AutoModTriggerUserProfile.to_str(),
                "AUTO_MOD_TRIGGER_USER_PROFILE"
            );
            assert_eq!(GuildFeatures::Banner.to_str(), "BANNER");
            assert_eq!(GuildFeatures::Bfg.to_str(), "BFG");
            assert_eq!(
                GuildFeatures::BoostingTiersExperimentMediumGuild.to_str(),
                "BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD"
            );
            assert_eq!(
                GuildFeatures::BoostingTiersExperimentSmallGuild.to_str(),
                "BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD"
            );
            assert_eq!(
                GuildFeatures::BotDeveloperEarlyAccess.to_str(),
                "BOT_DEVELOPER_EARLY_ACCESS"
            );
            assert_eq!(GuildFeatures::BurstReactions.to_str(), "BURST_REACTIONS");
            assert_eq!(GuildFeatures::CommunityCanary.to_str(), "COMMUNITY_CANARY");
            assert_eq!(
                GuildFeatures::CommunityExpLargeGated.to_str(),
                "COMMUNITY_EXP_LARGE_GATED"
            );
            assert_eq!(
                GuildFeatures::CommunityExpLargeUngated.to_str(),
                "COMMUNITY_EXP_LARGE_UNGATED"
            );
            assert_eq!(
                GuildFeatures::CommunityExpMedium.to_str(),
                "COMMUNITY_EXP_MEDIUM"
            );
            assert_eq!(
                GuildFeatures::ChannelEmojisGenerated.to_str(),
                "CHANNEL_EMOJIS_GENERATED"
            );
            assert_eq!(
                GuildFeatures::ChannelHighlights.to_str(),
                "CHANNEL_HIGHLIGHTS"
            );
            assert_eq!(
                GuildFeatures::ChannelHighlightsDisabled.to_str(),
                "CHANNEL_HIGHLIGHTS_DISABLED"
            );
            assert_eq!(GuildFeatures::ClydeEnabled.to_str(), "CLYDE_ENABLED");
            assert_eq!(
                GuildFeatures::ClydeExperimentEnabled.to_str(),
                "CLYDE_EXPERIMENT_ENABLED"
            );
            assert_eq!(GuildFeatures::ClydeDisabled.to_str(), "CLYDE_DISABLED");
            assert_eq!(GuildFeatures::Community.to_str(), "COMMUNITY");
            assert_eq!(
                GuildFeatures::CreatorAcceptedNewTerms.to_str(),
                "CREATOR_ACCEPTED_NEW_TERMS"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizable.to_str(),
                "CREATOR_MONETIZABLE"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizableDisabled.to_str(),
                "CREATOR_MONETIZABLE_DISABLED"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizablePendingNewOwnerOnboarding.to_str(),
                "CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizableProvisional.to_str(),
                "CREATOR_MONETIZABLE_PROVISIONAL"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizableRestricted.to_str(),
                "CREATOR_MONETIZABLE_RESTRICTED"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizableWhiteglove.to_str(),
                "CREATOR_MONETIZABLE_WHITEGLOVE"
            );
            assert_eq!(
                GuildFeatures::CreatorMonetizableApplicationAllowlist.to_str(),
                "CREATOR_MONETIZABLE_APPLICATION_ALLOWLIST"
            );
            assert_eq!(GuildFeatures::CreateStorePage.to_str(), "CREATE_STORE_PAGE");
            assert_eq!(
                GuildFeatures::DeveloperSupportServer.to_str(),
                "DEVELOPER_SUPPORT_SERVER"
            );
            assert_eq!(
                GuildFeatures::DiscoverableDisabled.to_str(),
                "DISCOVERABLE_DISABLED"
            );
            assert_eq!(GuildFeatures::Discoverable.to_str(), "DISCOVERABLE");
            assert_eq!(
                GuildFeatures::EnabledDiscoverableBefore.to_str(),
                "ENABLED_DISCOVERABLE_BEFORE"
            );
            assert_eq!(
                GuildFeatures::ExposedToActivitiesWTPExperiment.to_str(),
                "EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT"
            );
            assert_eq!(GuildFeatures::GuestsEnabled.to_str(), "GUESTS_ENABLED");
            assert_eq!(
                GuildFeatures::GuildAutomodDefaultList.to_str(),
                "GUILD_AUTOMOD_DEFAULT_LIST"
            );
            assert_eq!(
                GuildFeatures::GuildCommunicationDisabledGuilds.to_str(),
                "GUILD_COMMUNICATION_DISABLED_GUILDS"
            );
            assert_eq!(
                GuildFeatures::GuildHomeDeprecationOverride.to_str(),
                "GUILD_HOME_DEPRECATION_OVERRIDE"
            );
            assert_eq!(
                GuildFeatures::GuildHomeOverride.to_str(),
                "GUILD_HOME_OVERRIDE"
            );
            assert_eq!(GuildFeatures::GuildHomeTest.to_str(), "GUILD_HOME_TEST");
            assert_eq!(
                GuildFeatures::GuildMemberVerificationExperiment.to_str(),
                "GUILD_MEMBER_VERIFICATION_EXPERIMENT"
            );
            assert_eq!(GuildFeatures::GuildOnboarding.to_str(), "GUILD_ONBOARDING");
            assert_eq!(
                GuildFeatures::GuildOnboardingAdminOnly.to_str(),
                "GUILD_ONBOARDING_ADMIN_ONLY"
            );
            assert_eq!(
                GuildFeatures::GuildOnboardingEverEnabled.to_str(),
                "GUILD_ONBOARDING_EVER_ENABLED"
            );
            assert_eq!(
                GuildFeatures::GuildOnboardingHasPrompts.to_str(),
                "GUILD_ONBOARDING_HAS_PROMPTS"
            );
            assert_eq!(
                GuildFeatures::GuildRoleSubscription.to_str(),
                "GUILD_ROLE_SUBSCRIPTION"
            );
            assert_eq!(
                GuildFeatures::GuildRoleSubscriptionPurchaseFeedbackLoop.to_str(),
                "GUILD_ROLE_SUBSCRIPTION_PURCHASE_FEEDBACK_LOOP"
            );
            assert_eq!(
                GuildFeatures::GuildRoleSubscriptionTrials.to_str(),
                "GUILD_ROLE_SUBSCRIPTION_TRIALS"
            );
            assert_eq!(
                GuildFeatures::GuildServerGuide.to_str(),
                "GUILD_SERVER_GUIDE"
            );
            assert_eq!(
                GuildFeatures::GuildWebPageVanityURL.to_str(),
                "GUILD_WEB_PAGE_VANITY_URL"
            );
            assert_eq!(
                GuildFeatures::HadEarlyActivitiesAccess.to_str(),
                "HAD_EARLY_ACTIVITIES_ACCESS"
            );
            assert_eq!(
                GuildFeatures::HasDirectoryEntry.to_str(),
                "HAS_DIRECTORY_ENTRY"
            );
            assert_eq!(
                GuildFeatures::HideFromExperimentUi.to_str(),
                "HIDE_FROM_EXPERIMENT_UI"
            );
            assert_eq!(GuildFeatures::Hub.to_str(), "HUB");
            assert_eq!(
                GuildFeatures::IncreasedThreadLimit.to_str(),
                "INCREASED_THREAD_LIMIT"
            );
            assert_eq!(
                GuildFeatures::InternalEmployeeOnly.to_str(),
                "INTERNAL_EMPLOYEE_ONLY"
            );
            assert_eq!(GuildFeatures::InviteSplash.to_str(), "INVITE_SPLASH");
            assert_eq!(GuildFeatures::InvitesDisabled.to_str(), "INVITES_DISABLED");
            assert_eq!(GuildFeatures::LinkedToHub.to_str(), "LINKED_TO_HUB");
            assert_eq!(
                GuildFeatures::MarketplacesConnectionRoles.to_str(),
                "MARKETPLACES_CONNECTION_ROLES"
            );
            assert_eq!(GuildFeatures::MemberProfiles.to_str(), "MEMBER_PROFILES");
            assert_eq!(
                GuildFeatures::MemberVerificationGateEnabled.to_str(),
                "MEMBER_VERIFICATION_GATE_ENABLED"
            );
            assert_eq!(
                GuildFeatures::MemberVerificationManualApproval.to_str(),
                "MEMBER_VERIFICATION_MANUAL_APPROVAL"
            );
            assert_eq!(
                GuildFeatures::MobileWebRoleSubscriptionPurchasePage.to_str(),
                "MOBILE_WEB_ROLE_SUBSCRIPTION_PURCHASE_PAGE"
            );
            assert_eq!(
                GuildFeatures::MonetizationEnabled.to_str(),
                "MONETIZATION_ENABLED"
            );
            assert_eq!(GuildFeatures::MoreEmoji.to_str(), "MORE_EMOJI");
            assert_eq!(GuildFeatures::MoreStickers.to_str(), "MORE_STICKERS");
            assert_eq!(GuildFeatures::News.to_str(), "NEWS");
            assert_eq!(
                GuildFeatures::NewThreadPermissions.to_str(),
                "NEW_THREAD_PERMISSIONS"
            );
            assert_eq!(GuildFeatures::Partnered.to_str(), "PARTNERED");
            assert_eq!(
                GuildFeatures::PremiumTier3Override.to_str(),
                "PREMIUM_TIER_3_OVERRIDE"
            );
            assert_eq!(GuildFeatures::PreviewEnabled.to_str(), "PREVIEW_ENABLED");
            assert_eq!(
                GuildFeatures::RaidAlertsDisabled.to_str(),
                "RAID_ALERTS_DISABLED"
            );
            assert_eq!(GuildFeatures::RelayEnabled.to_str(), "RELAY_ENABLED");
            assert_eq!(
                GuildFeatures::RestrictSpamRiskGuild.to_str(),
                "RESTRICT_SPAM_RISK_GUILD"
            );
            assert_eq!(GuildFeatures::RoleIcons.to_str(), "ROLE_ICONS");
            assert_eq!(
                GuildFeatures::RoleSubscriptionsAvailableForPurchase.to_str(),
                "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE"
            );
            assert_eq!(
                GuildFeatures::RoleSubscriptionsEnabled.to_str(),
                "ROLE_SUBSCRIPTIONS_ENABLED"
            );
            assert_eq!(
                GuildFeatures::RoleSubscriptionsEnabledForPurchase.to_str(),
                "ROLE_SUBSCRIPTIONS_ENABLED_FOR_PURCHASE"
            );
            assert_eq!(GuildFeatures::Shard.to_str(), "SHARD");
            assert_eq!(
                GuildFeatures::SharedCanvasFriendsAndFamilyTest.to_str(),
                "SHARED_CANVAS_FRIENDS_AND_FAMILY_TEST"
            );
            assert_eq!(GuildFeatures::Soundboard.to_str(), "SOUNDBOARD");
            assert_eq!(
                GuildFeatures::SummariesEnabled.to_str(),
                "SUMMARIES_ENABLED"
            );
            assert_eq!(
                GuildFeatures::SummariesEnabledGa.to_str(),
                "SUMMARIES_ENABLED_GA"
            );
            assert_eq!(
                GuildFeatures::SummariesDisabledByUser.to_str(),
                "SUMMARIES_DISABLED_BY_USER"
            );
            assert_eq!(
                GuildFeatures::SummariesEnabledByUser.to_str(),
                "SUMMARIES_ENABLED_BY_USER"
            );
            assert_eq!(
                GuildFeatures::TextInStageEnabled.to_str(),
                "TEXT_IN_STAGE_ENABLED"
            );
            assert_eq!(
                GuildFeatures::TextInVoiceEnabled.to_str(),
                "TEXT_IN_VOICE_ENABLED"
            );
            assert_eq!(
                GuildFeatures::ThreadsEnabledTesting.to_str(),
                "THREADS_ENABLED_TESTING"
            );
            assert_eq!(GuildFeatures::ThreadsEnabled.to_str(), "THREADS_ENABLED");
            assert_eq!(
                GuildFeatures::ThreadDefaultAutoArchiveDuration.to_str(),
                "THREAD_DEFAULT_AUTO_ARCHIVE_DURATION"
            );
            assert_eq!(
                GuildFeatures::ThreadsOnlyChannel.to_str(),
                "THREADS_ONLY_CHANNEL"
            );
            assert_eq!(
                GuildFeatures::TicketedEventsEnabled.to_str(),
                "TICKETED_EVENTS_ENABLED"
            );
            assert_eq!(
                GuildFeatures::TicketingEnabled.to_str(),
                "TICKETING_ENABLED"
            );
            assert_eq!(GuildFeatures::VanityUrl.to_str(), "VANITY_URL");
            assert_eq!(GuildFeatures::Verified.to_str(), "VERIFIED");
            assert_eq!(GuildFeatures::VipRegions.to_str(), "VIP_REGIONS");
            assert_eq!(
                GuildFeatures::VoiceChannelEffects.to_str(),
                "VOICE_CHANNEL_EFFECTS"
            );
            assert_eq!(
                GuildFeatures::WelcomeScreenEnabled.to_str(),
                "WELCOME_SCREEN_ENABLED"
            );
            assert_eq!(GuildFeatures::AliasableNames.to_str(), "ALIASABLE_NAMES");
            assert_eq!(
                GuildFeatures::AllowInvalidChannelName.to_str(),
                "ALLOW_INVALID_CHANNEL_NAME"
            );
            assert_eq!(
                GuildFeatures::AllowUnnamedChannels.to_str(),
                "ALLOW_UNNAMED_CHANNELS"
            );
            assert_eq!(
                GuildFeatures::CrossChannelReplies.to_str(),
                "CROSS_CHANNEL_REPLIES"
            );
            assert_eq!(
                GuildFeatures::IrcLikeCategoryNames.to_str(),
                "IRC_LIKE_CATEGORY_NAMES"
            );
            assert_eq!(GuildFeatures::InvitesClosed.to_str(), "INVITES_CLOSED");
        }
    }

    mod domains_configuration {
        use chorus::types::types::domains_configuration::Domains;

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn display_domains() {
            let domains = Domains {
                cdn: "http://localhost:3020/cdn/".to_string(),
                gateway: "ws://localhost:3020/".to_string(),
                api_endpoint: "http://localhost:3020/".to_string(),
                default_api_version: "9".to_string(),
            };
            let fmt_domains = domains.to_string();
            assert!(fmt_domains.contains("CDN URL: http://localhost:3020/cdn/"));
            assert!(fmt_domains.contains("Gateway URL: ws://localhost:3020/"));
            assert!(fmt_domains.contains("API Endpoint: http://localhost:3020/"));
            assert!(fmt_domains.contains("Default API Version: 9"));
        }
    }
}

mod entities {
    use std::sync::{Arc, RwLock};

    use chorus::types::{ApplicationFlags, ConfigEntity, Emoji, User};
    use serde_json::json;

    #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
    #[cfg_attr(not(target_arch = "wasm32"), test)]
    fn application() {
        let application = chorus::types::Application::default();
        assert!(application.name == *"");
        assert!(application.verify_key == *"");
        assert_ne!(
            application.owner.read().unwrap().clone(),
            Arc::new(RwLock::new(User::default()))
                .read()
                .unwrap()
                .clone()
        );
        let flags = ApplicationFlags::from_bits(0).unwrap();
        assert!(application.flags == flags);
    }

    #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
    #[cfg_attr(not(target_arch = "wasm32"), test)]
    fn config() {
        let mut config_entity = ConfigEntity {
            key: "ExampleKey".to_string(),
            value: Some(json!(1)),
        };
        config_entity.as_int().unwrap();
        assert!(config_entity.as_bool().is_none());
        assert!(config_entity.as_string().is_none());
        config_entity.value = Some(json!(true));
        config_entity.as_bool().unwrap();
        assert!(config_entity.as_int().is_none());
        assert!(config_entity.as_string().is_none());
        config_entity.value = Some(json!("Hello"));
        config_entity.as_string().unwrap();
        assert!(config_entity.as_bool().is_none());
        assert!(config_entity.as_int().is_none());
    }

    #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
    #[cfg_attr(not(target_arch = "wasm32"), test)]
    fn emoji() {
        let emoji = Emoji::default();
        let another_emoji = Emoji::default();
        assert_ne!(emoji.id, another_emoji.id);
        assert_ne!(emoji, another_emoji);
    }

    mod guild {
        use chorus::types::Guild;

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn guild_partial_eq() {
            let id: u64 = 1;
            let mut guild1 = Guild::default();
            let mut guild2 = Guild::default();
            guild1.id = id.into();
            guild2.id = id.into();

            assert_eq!(guild1, guild2);
        }
    }

    mod message {
        use chorus::types::{Message, Snowflake};

        #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
        #[cfg_attr(not(target_arch = "wasm32"), test)]
        fn message_partial_eq() {
            let id: Snowflake = 1_u64.into();
            let mut message1 = Message::default();
            let mut message2 = Message::default();
            message1.id = id;
            message1.channel_id = id;
            message2.id = id;
            message2.channel_id = id;

            assert_eq!(message1, message2);
        }
    }
}