vrchatapi 1.20.7

VRChat API Client for Rust
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
/*
 * VRChat API Documentation
 *
 *
 * Contact: vrchatapi.lpv0t@aries.fyi
 * Generated by: https://openapi-generator.tech
 */

use crate::models;
use serde::{Deserialize, Serialize};

/// ApiConfig : Global configuration for various features.
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct ApiConfig {
    /// The current platform-wide event taking place
    #[serde(rename = "CampaignStatus")]
    pub campaign_status: String,
    /// Toggles if certain assets are preloaded in the background
    #[serde(rename = "DisableBackgroundPreloads")]
    pub disable_background_preloads: bool,
    /// Toggles whether users without a current VRC+ subscription are priority recipients for gift drops
    #[serde(rename = "LocationGiftingNonSubPrioEnabled")]
    pub location_gifting_non_sub_prio_enabled: bool,
    /// Unknown, probably voice optimization testing
    #[serde(rename = "VoiceEnableDegradation")]
    pub voice_enable_degradation: bool,
    /// Unknown, probably voice optimization testing
    #[serde(rename = "VoiceEnableReceiverLimiting")]
    pub voice_enable_receiver_limiting: bool,
    #[serde(rename = "accessLogsUrls")]
    pub access_logs_urls: models::ApiConfigAccessLogsUrls,
    /// VRChat's office address
    #[serde(rename = "address")]
    pub address: String,
    #[serde(rename = "ageVerificationInviteVisible")]
    pub age_verification_invite_visible: bool,
    #[serde(rename = "ageVerificationP")]
    pub age_verification_p: bool,
    #[serde(rename = "ageVerificationStatusVisible")]
    pub age_verification_status_visible: bool,
    /// Max retries for avatar analysis requests
    #[serde(rename = "analysisMaxRetries")]
    pub analysis_max_retries: i32,
    /// Interval between retries for avatar analysis requests
    #[serde(rename = "analysisRetryInterval")]
    pub analysis_retry_interval: i32,
    /// Unknown
    #[serde(rename = "analyticsSegment_NewUI_PctOfUsers")]
    pub analytics_segment_new_ui_pct_of_users: i32,
    /// Unknown
    #[serde(rename = "analyticsSegment_NewUI_Salt")]
    pub analytics_segment_new_ui_salt: String,
    /// Public Announcements
    #[serde(rename = "announcements")]
    pub announcements: Vec<models::ApiConfigAnnouncement>,
    #[serde(rename = "audioConfig", skip_serializing_if = "Option::is_none")]
    pub audio_config: Option<models::ApiConfigAudioConfig>,
    /// List of supported Languages
    #[serde(rename = "availableLanguageCodes")]
    pub available_language_codes: Vec<String>,
    /// List of supported Languages
    #[serde(rename = "availableLanguages")]
    pub available_languages: Vec<String>,
    #[serde(rename = "avatarPerfLimiter")]
    pub avatar_perf_limiter: models::ApiConfigAvatarPerfLimiter,
    /// Unknown
    #[serde(rename = "chatboxLogBufferSeconds")]
    pub chatbox_log_buffer_seconds: i32,
    /// apiKey to be used for all other requests
    #[serde(rename = "clientApiKey")]
    pub client_api_key: String,
    /// Unknown
    #[serde(rename = "clientBPSCeiling")]
    pub client_bps_ceiling: i32,
    /// Unknown
    #[serde(rename = "clientDisconnectTimeout")]
    pub client_disconnect_timeout: i32,
    /// Unknown
    #[serde(
        rename = "clientNetDispatchThread",
        skip_serializing_if = "Option::is_none"
    )]
    pub client_net_dispatch_thread: Option<bool>,
    /// Unknown
    #[serde(rename = "clientNetDispatchThreadMobile")]
    pub client_net_dispatch_thread_mobile: bool,
    /// Unknown
    #[serde(rename = "clientNetInThread", skip_serializing_if = "Option::is_none")]
    pub client_net_in_thread: Option<bool>,
    /// Unknown
    #[serde(rename = "clientNetInThread2", skip_serializing_if = "Option::is_none")]
    pub client_net_in_thread2: Option<bool>,
    /// Unknown
    #[serde(
        rename = "clientNetInThreadMobile",
        skip_serializing_if = "Option::is_none"
    )]
    pub client_net_in_thread_mobile: Option<bool>,
    /// Unknown
    #[serde(
        rename = "clientNetInThreadMobile2",
        skip_serializing_if = "Option::is_none"
    )]
    pub client_net_in_thread_mobile2: Option<bool>,
    /// Unknown
    #[serde(rename = "clientNetOutThread", skip_serializing_if = "Option::is_none")]
    pub client_net_out_thread: Option<bool>,
    /// Unknown
    #[serde(
        rename = "clientNetOutThread2",
        skip_serializing_if = "Option::is_none"
    )]
    pub client_net_out_thread2: Option<bool>,
    /// Unknown
    #[serde(
        rename = "clientNetOutThreadMobile",
        skip_serializing_if = "Option::is_none"
    )]
    pub client_net_out_thread_mobile: Option<bool>,
    /// Unknown
    #[serde(
        rename = "clientNetOutThreadMobile2",
        skip_serializing_if = "Option::is_none"
    )]
    pub client_net_out_thread_mobile2: Option<bool>,
    /// Unknown
    #[serde(rename = "clientQR", skip_serializing_if = "Option::is_none")]
    pub client_qr: Option<i32>,
    /// Unknown
    #[serde(rename = "clientReservedPlayerBPS")]
    pub client_reserved_player_bps: i32,
    /// Unknown
    #[serde(rename = "clientSentCountAllowance")]
    pub client_sent_count_allowance: i32,
    #[serde(rename = "constants")]
    pub constants: models::ApiConfigConstants,
    /// VRChat's contact email
    #[serde(rename = "contactEmail")]
    pub contact_email: String,
    /// VRChat's copyright-issues-related email
    #[serde(rename = "copyrightEmail")]
    pub copyright_email: String,
    /// VRChat's DMCA claim webform url
    #[serde(rename = "copyrightFormUrl")]
    pub copyright_form_url: String,
    /// Current version number of the Privacy Agreement
    #[serde(rename = "currentPrivacyVersion")]
    pub current_privacy_version: i32,
    /// Current version number of the Terms of Service
    #[serde(rename = "currentTOSVersion")]
    pub current_tos_version: i32,
    #[serde(rename = "defaultAvatar")]
    pub default_avatar: String,
    #[serde(rename = "defaultStickerSet")]
    pub default_sticker_set: String,
    /// Unknown
    #[serde(rename = "devLanguageCodes", skip_serializing_if = "Option::is_none")]
    pub dev_language_codes: Option<Vec<String>>,
    /// Link to download the development SDK, use downloadUrls instead
    #[serde(rename = "devSdkUrl")]
    pub dev_sdk_url: String,
    /// Version of the development SDK
    #[serde(rename = "devSdkVersion")]
    pub dev_sdk_version: String,
    /// Unknown, \"dis\" maybe for disconnect?
    #[serde(rename = "dis-countdown")]
    pub dis_countdown: String,
    /// Unknown
    #[serde(
        rename = "disableAVProInProton",
        skip_serializing_if = "Option::is_none"
    )]
    pub disable_av_pro_in_proton: Option<bool>,
    /// Toggles if copying avatars should be disabled
    #[serde(rename = "disableAvatarCopying")]
    pub disable_avatar_copying: bool,
    /// Toggles if avatar gating should be disabled. Avatar gating restricts uploading of avatars to people with the `system_avatar_access` Tag or `admin_avatar_access` Tag
    #[serde(rename = "disableAvatarGating")]
    pub disable_avatar_gating: bool,
    /// Unknown
    #[serde(rename = "disableCaptcha", skip_serializing_if = "Option::is_none")]
    pub disable_captcha: Option<bool>,
    /// Toggles if the Community Labs should be disabled
    #[serde(rename = "disableCommunityLabs")]
    pub disable_community_labs: bool,
    /// Toggles if promotion out of Community Labs should be disabled
    #[serde(rename = "disableCommunityLabsPromotion")]
    pub disable_community_labs_promotion: bool,
    /// Unknown
    #[serde(rename = "disableEmail")]
    pub disable_email: bool,
    /// Toggles if Analytics should be disabled.
    #[serde(rename = "disableEventStream")]
    pub disable_event_stream: bool,
    /// Toggles if feedback gating should be disabled. Feedback gating restricts submission of feedback (reporting a World or User) to people with the `system_feedback_access` Tag.
    #[serde(rename = "disableFeedbackGating")]
    pub disable_feedback_gating: bool,
    /// Unknown, probably toggles compilation of frontend web builds? So internal flag?
    #[serde(rename = "disableFrontendBuilds")]
    pub disable_frontend_builds: bool,
    /// Toggles if gift drops should be disabled
    #[serde(rename = "disableGiftDrops")]
    pub disable_gift_drops: bool,
    /// Unknown
    #[serde(rename = "disableHello")]
    pub disable_hello: bool,
    /// Toggles if signing up for Subscriptions in Oculus is disabled or not.
    #[serde(rename = "disableOculusSubs")]
    pub disable_oculus_subs: bool,
    /// Toggles if new user account registration should be disabled.
    #[serde(rename = "disableRegistration")]
    pub disable_registration: bool,
    /// Toggles if Steam Networking should be disabled. VRChat these days uses Photon Unity Networking (PUN) instead.
    #[serde(rename = "disableSteamNetworking")]
    pub disable_steam_networking: bool,
    /// Toggles if 2FA should be disabled.
    #[serde(rename = "disableTwoFactorAuth")]
    pub disable_two_factor_auth: bool,
    /// Toggles if Udon should be universally disabled in-game.
    #[serde(rename = "disableUdon")]
    pub disable_udon: bool,
    /// Toggles if account upgrading \"linking with Steam/Oculus\" should be disabled.
    #[serde(rename = "disableUpgradeAccount")]
    pub disable_upgrade_account: bool,
    /// Download link for game on the Oculus Rift website.
    #[serde(rename = "downloadLinkWindows")]
    pub download_link_windows: String,
    #[serde(rename = "downloadUrls")]
    pub download_urls: models::ApiConfigDownloadUrlList,
    /// Array of DynamicWorldRow objects, used by the game to display the list of world rows
    #[serde(rename = "dynamicWorldRows")]
    pub dynamic_world_rows: Vec<models::DynamicContentRow>,
    /// Unknown
    #[serde(rename = "economyLedgerBackfill")]
    pub economy_ledger_backfill: bool,
    /// Unknown
    #[serde(rename = "economyLedgerMigrationStop")]
    pub economy_ledger_migration_stop: String,
    /// Unknown
    #[serde(rename = "economyLedgerMode")]
    pub economy_ledger_mode: String,
    /// Unknown
    #[serde(rename = "economyPauseEnd")]
    pub economy_pause_end: String,
    /// Unknown
    #[serde(rename = "economyPauseStart")]
    pub economy_pause_start: String,
    /// Unknown
    #[serde(rename = "economyPurchaseRepairEnabled")]
    pub economy_purchase_repair_enabled: bool,
    /// Unknown
    #[serde(rename = "economyState")]
    pub economy_state: i32,
    #[serde(rename = "events")]
    pub events: models::ApiConfigEvents,
    /// Unknown
    #[serde(rename = "forceUseLatestWorld")]
    pub force_use_latest_world: bool,
    /// Display type of gifts
    #[serde(rename = "giftDisplayType")]
    pub gift_display_type: String,
    /// Unknown
    #[serde(rename = "googleApiClientId")]
    pub google_api_client_id: String,
    /// WorldID be \"offline\" on User profiles if you are not friends with that user.
    #[serde(rename = "homeWorldId")]
    pub home_world_id: String,
    /// Redirect target if you try to open the base API domain in your browser
    #[serde(rename = "homepageRedirectTarget")]
    pub homepage_redirect_target: String,
    /// WorldID be \"offline\" on User profiles if you are not friends with that user.
    #[serde(rename = "hubWorldId")]
    pub hub_world_id: String,
    /// A list of explicitly allowed origins that worlds can request images from via the Udon's [VRCImageDownloader#DownloadImage](https://creators.vrchat.com/worlds/udon/image-loading/#downloadimage).
    #[serde(rename = "imageHostUrlList")]
    pub image_host_url_list: Vec<String>,
    /// Current app version for iOS
    #[serde(rename = "iosAppVersion")]
    pub ios_app_version: Vec<String>,
    #[serde(rename = "iosVersion")]
    pub ios_version: models::ApiConfigIosVersion,
    /// VRChat's job application email
    #[serde(rename = "jobsEmail")]
    pub jobs_email: String,
    /// The maximum number of custom emoji each user may have at a given time.
    #[serde(rename = "maxUserEmoji")]
    pub max_user_emoji: i32,
    /// The maximum number of custom stickers each user may have at a given time.
    #[serde(rename = "maxUserStickers")]
    pub max_user_stickers: i32,
    #[serde(rename = "minSupportedClientBuildNumber")]
    pub min_supported_client_build_number: models::ApiConfigMinSupportedClientBuildNumber,
    /// Minimum Unity version required for uploading assets
    #[serde(rename = "minimumUnityVersionForUploads")]
    pub minimum_unity_version_for_uploads: String,
    /// VRChat's moderation related email
    #[serde(rename = "moderationEmail")]
    pub moderation_email: String,
    /// Used in-game to notify a user they aren't allowed to select avatars in private worlds
    #[serde(rename = "notAllowedToSelectAvatarInPrivateWorldMessage")]
    pub not_allowed_to_select_avatar_in_private_world_message: String,
    #[serde(rename = "offlineAnalysis")]
    pub offline_analysis: models::ApiConfigOfflineAnalysis,
    /// Unknown
    #[serde(rename = "photonNameserverOverrides")]
    pub photon_nameserver_overrides: Vec<String>,
    /// Unknown
    #[serde(rename = "photonPublicKeys")]
    pub photon_public_keys: Vec<String>,
    /// Currently used youtube-dl.exe hash in SHA1-delimited format
    #[serde(rename = "player-url-resolver-sha1")]
    pub player_url_resolver_sha1: String,
    /// Currently used youtube-dl.exe version
    #[serde(rename = "player-url-resolver-version")]
    pub player_url_resolver_version: String,
    /// Public key, hex encoded
    #[serde(rename = "publicKey")]
    pub public_key: String,
    /// Categories available for reporting objectionable content
    #[serde(rename = "reportCategories")]
    pub report_categories: std::collections::HashMap<String, models::ReportCategory>,
    /// URL to the report form
    #[serde(rename = "reportFormUrl")]
    pub report_form_url: String,
    /// Options for reporting content. Select a key+value from this mapping as the `type` of the report. Select one key+value from the object at reportOptions[type] as the `category` of the report. reportCategories[category] contains user-facing text to display for all possible categories. Select one value from the array at reportOptions[type][category] as the `reason` of the report. reportReasons[reason] contains user-facing text to display for all possible categories.
    #[serde(rename = "reportOptions")]
    pub report_options:
        std::collections::HashMap<String, std::collections::HashMap<String, Vec<String>>>,
    /// Reasons available for submitting a report
    #[serde(rename = "reportReasons")]
    pub report_reasons: std::collections::HashMap<String, models::ReportReason>,
    #[serde(rename = "requireAgeVerificationBetaTag")]
    pub require_age_verification_beta_tag: bool,
    /// Link to the developer FAQ
    #[serde(rename = "sdkDeveloperFaqUrl")]
    pub sdk_developer_faq_url: String,
    /// Link to the official VRChat Discord
    #[serde(rename = "sdkDiscordUrl")]
    pub sdk_discord_url: String,
    /// Used in the SDK to notify a user they aren't allowed to upload avatars/worlds yet
    #[serde(rename = "sdkNotAllowedToPublishMessage")]
    pub sdk_not_allowed_to_publish_message: String,
    /// Unity version supported by the SDK
    #[serde(rename = "sdkUnityVersion")]
    pub sdk_unity_version: String,
    /// A list of explicitly allowed origins that worlds can request strings from via the Udon's [VRCStringDownloader.LoadUrl](https://creators.vrchat.com/worlds/udon/string-loading/#ivrcstringdownload).
    #[serde(rename = "stringHostUrlList")]
    pub string_host_url_list: Vec<String>,
    /// VRChat's support email
    #[serde(rename = "supportEmail")]
    pub support_email: String,
    /// VRChat's support form
    #[serde(rename = "supportFormUrl")]
    pub support_form_url: String,
    /// WorldID be \"offline\" on User profiles if you are not friends with that user.
    #[serde(rename = "timeOutWorldId")]
    pub time_out_world_id: String,
    /// Unknown
    #[serde(rename = "timekeeping")]
    pub timekeeping: bool,
    /// WorldID be \"offline\" on User profiles if you are not friends with that user.
    #[serde(rename = "tutorialWorldId")]
    pub tutorial_world_id: String,
    /// Unknown
    #[serde(rename = "updateRateMsMaximum")]
    pub update_rate_ms_maximum: i32,
    /// Unknown
    #[serde(rename = "updateRateMsMinimum")]
    pub update_rate_ms_minimum: i32,
    /// Unknown
    #[serde(rename = "updateRateMsNormal")]
    pub update_rate_ms_normal: i32,
    /// Unknown
    #[serde(rename = "updateRateMsUdonManual")]
    pub update_rate_ms_udon_manual: i32,
    /// Unknown
    #[serde(rename = "uploadAnalysisPercent")]
    pub upload_analysis_percent: i32,
    /// List of allowed URLs that bypass the \"Allow untrusted URL's\" setting in-game
    #[serde(rename = "urlList")]
    pub url_list: Vec<String>,
    /// Unknown
    #[serde(rename = "useReliableUdpForVoice")]
    pub use_reliable_udp_for_voice: bool,
    /// Download link for game on the Steam website.
    #[serde(rename = "viveWindowsUrl")]
    pub vive_windows_url: String,
    /// Unknown
    #[serde(rename = "websocketMaxFriendsRefreshDelay")]
    pub websocket_max_friends_refresh_delay: i32,
    /// Unknown
    #[serde(rename = "websocketQuickReconnectTime")]
    pub websocket_quick_reconnect_time: i32,
    /// Unknown
    #[serde(rename = "websocketReconnectMaxDelay")]
    pub websocket_reconnect_max_delay: i32,
    /// List of allowed URLs that are allowed to host avatar assets
    #[serde(rename = "whiteListedAssetUrls")]
    pub white_listed_asset_urls: Vec<String>,
}

impl ApiConfig {
    /// Global configuration for various features.
    pub fn new(
        campaign_status: String,
        disable_background_preloads: bool,
        location_gifting_non_sub_prio_enabled: bool,
        voice_enable_degradation: bool,
        voice_enable_receiver_limiting: bool,
        access_logs_urls: models::ApiConfigAccessLogsUrls,
        address: String,
        age_verification_invite_visible: bool,
        age_verification_p: bool,
        age_verification_status_visible: bool,
        analysis_max_retries: i32,
        analysis_retry_interval: i32,
        analytics_segment_new_ui_pct_of_users: i32,
        analytics_segment_new_ui_salt: String,
        announcements: Vec<models::ApiConfigAnnouncement>,
        available_language_codes: Vec<String>,
        available_languages: Vec<String>,
        avatar_perf_limiter: models::ApiConfigAvatarPerfLimiter,
        chatbox_log_buffer_seconds: i32,
        client_api_key: String,
        client_bps_ceiling: i32,
        client_disconnect_timeout: i32,
        client_net_dispatch_thread_mobile: bool,
        client_reserved_player_bps: i32,
        client_sent_count_allowance: i32,
        constants: models::ApiConfigConstants,
        contact_email: String,
        copyright_email: String,
        copyright_form_url: String,
        current_privacy_version: i32,
        current_tos_version: i32,
        default_avatar: String,
        default_sticker_set: String,
        dev_sdk_url: String,
        dev_sdk_version: String,
        dis_countdown: String,
        disable_avatar_copying: bool,
        disable_avatar_gating: bool,
        disable_community_labs: bool,
        disable_community_labs_promotion: bool,
        disable_email: bool,
        disable_event_stream: bool,
        disable_feedback_gating: bool,
        disable_frontend_builds: bool,
        disable_gift_drops: bool,
        disable_hello: bool,
        disable_oculus_subs: bool,
        disable_registration: bool,
        disable_steam_networking: bool,
        disable_two_factor_auth: bool,
        disable_udon: bool,
        disable_upgrade_account: bool,
        download_link_windows: String,
        download_urls: models::ApiConfigDownloadUrlList,
        dynamic_world_rows: Vec<models::DynamicContentRow>,
        economy_ledger_backfill: bool,
        economy_ledger_migration_stop: String,
        economy_ledger_mode: String,
        economy_pause_end: String,
        economy_pause_start: String,
        economy_purchase_repair_enabled: bool,
        economy_state: i32,
        events: models::ApiConfigEvents,
        force_use_latest_world: bool,
        gift_display_type: String,
        google_api_client_id: String,
        home_world_id: String,
        homepage_redirect_target: String,
        hub_world_id: String,
        image_host_url_list: Vec<String>,
        ios_app_version: Vec<String>,
        ios_version: models::ApiConfigIosVersion,
        jobs_email: String,
        max_user_emoji: i32,
        max_user_stickers: i32,
        min_supported_client_build_number: models::ApiConfigMinSupportedClientBuildNumber,
        minimum_unity_version_for_uploads: String,
        moderation_email: String,
        not_allowed_to_select_avatar_in_private_world_message: String,
        offline_analysis: models::ApiConfigOfflineAnalysis,
        photon_nameserver_overrides: Vec<String>,
        photon_public_keys: Vec<String>,
        player_url_resolver_sha1: String,
        player_url_resolver_version: String,
        public_key: String,
        report_categories: std::collections::HashMap<String, models::ReportCategory>,
        report_form_url: String,
        report_options: std::collections::HashMap<
            String,
            std::collections::HashMap<String, Vec<String>>,
        >,
        report_reasons: std::collections::HashMap<String, models::ReportReason>,
        require_age_verification_beta_tag: bool,
        sdk_developer_faq_url: String,
        sdk_discord_url: String,
        sdk_not_allowed_to_publish_message: String,
        sdk_unity_version: String,
        string_host_url_list: Vec<String>,
        support_email: String,
        support_form_url: String,
        time_out_world_id: String,
        timekeeping: bool,
        tutorial_world_id: String,
        update_rate_ms_maximum: i32,
        update_rate_ms_minimum: i32,
        update_rate_ms_normal: i32,
        update_rate_ms_udon_manual: i32,
        upload_analysis_percent: i32,
        url_list: Vec<String>,
        use_reliable_udp_for_voice: bool,
        vive_windows_url: String,
        websocket_max_friends_refresh_delay: i32,
        websocket_quick_reconnect_time: i32,
        websocket_reconnect_max_delay: i32,
        white_listed_asset_urls: Vec<String>,
    ) -> ApiConfig {
        ApiConfig {
            campaign_status,
            disable_background_preloads,
            location_gifting_non_sub_prio_enabled,
            voice_enable_degradation,
            voice_enable_receiver_limiting,
            access_logs_urls,
            address,
            age_verification_invite_visible,
            age_verification_p,
            age_verification_status_visible,
            analysis_max_retries,
            analysis_retry_interval,
            analytics_segment_new_ui_pct_of_users,
            analytics_segment_new_ui_salt,
            announcements,
            audio_config: None,
            available_language_codes,
            available_languages,
            avatar_perf_limiter,
            chatbox_log_buffer_seconds,
            client_api_key,
            client_bps_ceiling,
            client_disconnect_timeout,
            client_net_dispatch_thread: None,
            client_net_dispatch_thread_mobile,
            client_net_in_thread: None,
            client_net_in_thread2: None,
            client_net_in_thread_mobile: None,
            client_net_in_thread_mobile2: None,
            client_net_out_thread: None,
            client_net_out_thread2: None,
            client_net_out_thread_mobile: None,
            client_net_out_thread_mobile2: None,
            client_qr: None,
            client_reserved_player_bps,
            client_sent_count_allowance,
            constants,
            contact_email,
            copyright_email,
            copyright_form_url,
            current_privacy_version,
            current_tos_version,
            default_avatar,
            default_sticker_set,
            dev_language_codes: None,
            dev_sdk_url,
            dev_sdk_version,
            dis_countdown,
            disable_av_pro_in_proton: None,
            disable_avatar_copying,
            disable_avatar_gating,
            disable_captcha: None,
            disable_community_labs,
            disable_community_labs_promotion,
            disable_email,
            disable_event_stream,
            disable_feedback_gating,
            disable_frontend_builds,
            disable_gift_drops,
            disable_hello,
            disable_oculus_subs,
            disable_registration,
            disable_steam_networking,
            disable_two_factor_auth,
            disable_udon,
            disable_upgrade_account,
            download_link_windows,
            download_urls,
            dynamic_world_rows,
            economy_ledger_backfill,
            economy_ledger_migration_stop,
            economy_ledger_mode,
            economy_pause_end,
            economy_pause_start,
            economy_purchase_repair_enabled,
            economy_state,
            events,
            force_use_latest_world,
            gift_display_type,
            google_api_client_id,
            home_world_id,
            homepage_redirect_target,
            hub_world_id,
            image_host_url_list,
            ios_app_version,
            ios_version,
            jobs_email,
            max_user_emoji,
            max_user_stickers,
            min_supported_client_build_number,
            minimum_unity_version_for_uploads,
            moderation_email,
            not_allowed_to_select_avatar_in_private_world_message,
            offline_analysis,
            photon_nameserver_overrides,
            photon_public_keys,
            player_url_resolver_sha1,
            player_url_resolver_version,
            public_key,
            report_categories,
            report_form_url,
            report_options,
            report_reasons,
            require_age_verification_beta_tag,
            sdk_developer_faq_url,
            sdk_discord_url,
            sdk_not_allowed_to_publish_message,
            sdk_unity_version,
            string_host_url_list,
            support_email,
            support_form_url,
            time_out_world_id,
            timekeeping,
            tutorial_world_id,
            update_rate_ms_maximum,
            update_rate_ms_minimum,
            update_rate_ms_normal,
            update_rate_ms_udon_manual,
            upload_analysis_percent,
            url_list,
            use_reliable_udp_for_voice,
            vive_windows_url,
            websocket_max_friends_refresh_delay,
            websocket_quick_reconnect_time,
            websocket_reconnect_max_delay,
            white_listed_asset_urls,
        }
    }
}