embystream 0.0.20

Another Emby streaming application (frontend/backend separation) written in Rust.
Documentation
use serde::Deserialize;

#[derive(Debug, Default, Deserialize)]
pub struct User {
    #[serde(rename = "Name", default)]
    pub name: Option<String>,
    #[serde(rename = "ServerId", default)]
    pub server_id: Option<String>,
    #[serde(rename = "Prefix", default)]
    pub prefix: Option<String>,
    #[serde(rename = "DateCreated", default)]
    pub date_created: Option<String>,
    #[serde(rename = "Id", default)]
    pub id: Option<String>,
    #[serde(rename = "HasPassword", default)]
    pub has_password: Option<bool>,
    #[serde(rename = "HasConfiguredPassword", default)]
    pub has_configured_password: Option<bool>,
    #[serde(rename = "LastLoginDate", default)]
    pub last_login_date: Option<String>,
    #[serde(rename = "LastActivityDate", default)]
    pub last_activity_date: Option<String>,
    #[serde(rename = "Configuration", default)]
    pub configuration: Option<UserConfiguration>,
    #[serde(rename = "Policy", default)]
    pub policy: Option<UserPolicy>,
    #[serde(rename = "HasConfiguredEasyPassword", default)]
    pub has_configured_easy_password: Option<bool>,
}

#[derive(Debug, Deserialize)]
pub struct UserConfiguration {
    #[serde(rename = "AudioLanguagePreference", default)]
    pub audio_language_preference: Option<String>,
    #[serde(rename = "PlayDefaultAudioTrack", default)]
    pub play_default_audio_track: Option<bool>,
    #[serde(rename = "DisplayMissingEpisodes", default)]
    pub display_missing_episodes: Option<bool>,
    #[serde(rename = "SubtitleMode", default)]
    pub subtitle_mode: Option<String>,
    #[serde(rename = "OrderedViews", default)]
    pub ordered_views: Vec<String>,
    #[serde(rename = "LatestItemsExcludes", default)]
    pub latest_items_excludes: Vec<String>,
    #[serde(rename = "MyMediaExcludes", default)]
    pub my_media_excludes: Vec<String>,
    #[serde(rename = "HidePlayedInLatest", default)]
    pub hide_played_in_latest: Option<bool>,
    #[serde(rename = "HidePlayedInMoreLikeThis", default)]
    pub hide_played_in_more_like_this: Option<bool>,
    #[serde(rename = "HidePlayedInSuggestions", default)]
    pub hide_played_in_suggestions: Option<bool>,
    #[serde(rename = "RememberAudioSelections", default)]
    pub remember_audio_selections: Option<bool>,
    #[serde(rename = "RememberSubtitleSelections", default)]
    pub remember_subtitle_selections: Option<bool>,
    #[serde(rename = "EnableNextEpisodeAutoPlay", default)]
    pub enable_next_episode_auto_play: Option<bool>,
    #[serde(rename = "ResumeRewindSeconds", default)]
    pub resume_rewind_seconds: Option<i32>,
    #[serde(rename = "IntroSkipMode", default)]
    pub intro_skip_mode: Option<String>,
    #[serde(rename = "EnableLocalPassword", default)]
    pub enable_local_password: Option<bool>,
}

#[derive(Debug, Deserialize)]
pub struct UserPolicy {
    #[serde(rename = "IsAdministrator", default)]
    pub is_administrator: Option<bool>,
    #[serde(rename = "IsHidden", default)]
    pub is_hidden: Option<bool>,
    #[serde(rename = "IsHiddenRemotely", default)]
    pub is_hidden_remotely: Option<bool>,
    #[serde(rename = "IsHiddenFromUnusedDevices", default)]
    pub is_hidden_from_unused_devices: Option<bool>,
    #[serde(rename = "IsDisabled", default)]
    pub is_disabled: Option<bool>,
    #[serde(rename = "LockedOutDate", default)]
    pub locked_out_date: Option<i64>,
    #[serde(rename = "AllowTagOrRating", default)]
    pub allow_tag_or_rating: Option<bool>,
    #[serde(rename = "BlockedTags", default)]
    pub blocked_tags: Vec<String>,
    #[serde(rename = "IsTagBlockingModeInclusive", default)]
    pub is_tag_blocking_mode_inclusive: Option<bool>,
    #[serde(rename = "IncludeTags", default)]
    pub include_tags: Vec<String>,
    #[serde(rename = "EnableUserPreferenceAccess", default)]
    pub enable_user_preference_access: Option<bool>,
    #[serde(rename = "AccessSchedules", default)]
    pub access_schedules: Vec<String>,
    #[serde(rename = "BlockUnratedItems", default)]
    pub block_unrated_items: Vec<String>,
    #[serde(rename = "EnableRemoteControlOfOtherUsers", default)]
    pub enable_remote_control_of_other_users: Option<bool>,
    #[serde(rename = "EnableSharedDeviceControl", default)]
    pub enable_shared_device_control: Option<bool>,
    #[serde(rename = "EnableRemoteAccess", default)]
    pub enable_remote_access: Option<bool>,
    #[serde(rename = "EnableLiveTvManagement", default)]
    pub enable_live_tv_management: Option<bool>,
    #[serde(rename = "EnableLiveTvAccess", default)]
    pub enable_live_tv_access: Option<bool>,
    #[serde(rename = "EnableMediaPlayback", default)]
    pub enable_media_playback: Option<bool>,
    #[serde(rename = "EnableAudioPlaybackTranscoding", default)]
    pub enable_audio_playback_transcoding: Option<bool>,
    #[serde(rename = "EnableVideoPlaybackTranscoding", default)]
    pub enable_video_playback_transcoding: Option<bool>,
    #[serde(rename = "EnablePlaybackRemuxing", default)]
    pub enable_playback_remuxing: Option<bool>,
    #[serde(rename = "EnableContentDeletion", default)]
    pub enable_content_deletion: Option<bool>,
    #[serde(rename = "RestrictedFeatures", default)]
    pub restricted_features: Vec<String>,
    #[serde(rename = "EnableContentDeletionFromFolders", default)]
    pub enable_content_deletion_from_folders: Vec<String>,
    #[serde(rename = "EnableContentDownloading", default)]
    pub enable_content_downloading: Option<bool>,
    #[serde(rename = "EnableSubtitleDownloading", default)]
    pub enable_subtitle_downloading: Option<bool>,
    #[serde(rename = "EnableSubtitleManagement", default)]
    pub enable_subtitle_management: Option<bool>,
    #[serde(rename = "EnableSyncTranscoding", default)]
    pub enable_sync_transcoding: Option<bool>,
    #[serde(rename = "EnableMediaConversion", default)]
    pub enable_media_conversion: Option<bool>,
    #[serde(rename = "EnabledChannels", default)]
    pub enabled_channels: Vec<String>,
    #[serde(rename = "EnableAllChannels", default)]
    pub enable_all_channels: Option<bool>,
    #[serde(rename = "EnabledFolders", default)]
    pub enabled_folders: Vec<String>,
    #[serde(rename = "EnableAllFolders", default)]
    pub enable_all_folders: Option<bool>,
    #[serde(rename = "InvalidLoginAttemptCount", default)]
    pub invalid_login_attempt_count: Option<i32>,
    #[serde(rename = "EnablePublicSharing", default)]
    pub enable_public_sharing: Option<bool>,
    #[serde(rename = "RemoteClientBitrateLimit", default)]
    pub remote_client_bitrate_limit: Option<i32>,
    #[serde(rename = "AuthenticationProviderId", default)]
    pub authentication_provider_id: Option<String>,
    #[serde(rename = "ExcludedSubFolders", default)]
    pub excluded_sub_folders: Vec<String>,
    #[serde(rename = "SimultaneousStreamLimit", default)]
    pub simultaneous_stream_limit: Option<i32>,
    #[serde(rename = "EnabledDevices", default)]
    pub enabled_devices: Vec<String>,
    #[serde(rename = "EnableAllDevices", default)]
    pub enable_all_devices: Option<bool>,
    #[serde(rename = "AllowCameraUpload", default)]
    pub allow_camera_upload: Option<bool>,
    #[serde(rename = "AllowSharingPersonalItems", default)]
    pub allow_sharing_personal_items: Option<bool>,
}