use serde::{Deserialize, Serialize};
use std::{collections::BTreeMap, str::FromStr};
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct MainUserInterface {
#[serde(
rename = "UIApplicationSceneManifest",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub application_scene_manifest: Option<ApplicationSceneManifest>,
#[serde(
rename = "NSMainStoryboardFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub main_storyboard_resource_file_base_name: Option<String>,
#[serde(
rename = "UIMainStoryboardFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub main_storyboard_file_base_name: Option<String>,
#[serde(
rename = "NSMainNibFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub main_nib_file_base_name: Option<String>,
#[serde(
rename = "LSUIElement",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub application_is_agent: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchInterface {
#[serde(
rename = "UILaunchScreen",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_screen: Option<LaunchScreen>,
#[serde(
rename = "UILaunchScreens",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_screens: Option<LaunchScreens>,
#[serde(
rename = "UILaunchStoryboardName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_storyboard_name: Option<String>,
#[serde(
rename = "UILaunchStoryboards",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_storyboards: Option<LaunchStoryboards>,
#[serde(
rename = "LSUIPresentationMode",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub presentation_mode: Option<u8>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Icons {
#[serde(
rename = "CFBundleIcons",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_icons: Option<BundleIcons>,
#[serde(
rename = "CFBundleIconFiles",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_icon_files: Option<Vec<String>>,
#[serde(
rename = "CFBundleIconFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_icon_file: Option<String>,
#[serde(
rename = "CFBundleIconName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_icon_name: Option<String>,
#[serde(
rename = "UIPrerenderedIcon",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub prerendered_icon: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Orientation {
#[serde(
rename = "UIInterfaceOrientation",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub interface_orientation: Option<InterfaceOrientation>,
#[serde(
rename = "UISupportedInterfaceOrientations",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_vec_enum_option"
)]
pub supported_interface_orientations: Option<Vec<InterfaceOrientation>>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Styling {
#[serde(
rename = "UIUserInterfaceStyle",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub user_interface_style: Option<UserInterfaceStyle>,
#[serde(
rename = "UIViewEdgeAntialiasing",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub view_edge_antialiasing: Option<bool>,
#[serde(
rename = "UIWhitePointAdaptivityStyle",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub white_point_adaptivity_style: Option<WhitePointAdaptivityStyle>,
#[serde(
rename = "UIViewGroupOpacity",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub view_group_opacity: Option<bool>,
#[serde(
rename = "UIRequiresFullScreen",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub requires_full_screen: Option<bool>,
#[serde(
rename = "NSAccentColorName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub accent_color_name: Option<String>,
#[serde(
rename = "NSWidgetBackgroundColorName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub widget_background_color_name: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Fonts {
#[serde(
rename = "ATSApplicationFontsPath",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub application_fonts_path: Option<String>,
#[serde(
rename = "UIAppFonts",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub app_fonts: Option<Vec<String>>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Default)]
pub struct StatusBar {
#[serde(
rename = "UIStatusBarHidden",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub status_bar_hidden: Option<bool>,
#[serde(
rename = "UIStatusBarStyle",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub status_bar_style: Option<StatusBarStyle>,
#[serde(
rename = "UIStatusBarTintParameters",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub status_bar_tint_parameters: Option<StatusBarTintParameters>,
#[serde(
rename = "UIViewControllerBasedStatusBarAppearance",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub view_controller_based_status_bar_appearance: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Preferences {
#[serde(
rename = "NSPrefPaneIconFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub pref_pane_icon_file: Option<String>,
#[serde(
rename = "NSPrefPaneIconLabel",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub pref_pane_icon_label: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Graphics {
#[serde(
rename = "UIAppSupportsHDR",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub app_supports_hdr: Option<bool>,
#[serde(
rename = "NSHighResolutionCapable",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub high_resolution_capable: Option<bool>,
#[serde(
rename = "NSSupportsAutomaticGraphicsSwitching",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub supports_automatic_graphics_switching: Option<bool>,
#[serde(
rename = "GPUEjectPolicy",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub gpu_eject_policy: Option<GpuEjectPolicy>,
#[serde(
rename = "GPUSelectionPolicy",
skip_serializing_if = "Option::is_none",
serialize_with = "crate::serialize_enum_option"
)]
pub gpu_selection_policy: Option<GpuSelectionPolicy>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Default)]
pub struct QuickLook {
#[serde(
rename = "QLNeedsToBeRunInMainThread",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub needs_to_be_run_in_main_thread: Option<bool>,
#[serde(
rename = "QLPreviewHeight",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub preview_height: Option<f32>,
#[serde(
rename = "QLPreviewWidth",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub preview_width: Option<f32>,
#[serde(
rename = "QLSupportsConcurrentRequests",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub supports_concurrent_requests: Option<bool>,
#[serde(
rename = "QLThumbnailMinimumSize",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub thumbnail_minimum_size: Option<f32>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct DeprecatedKeys {
#[deprecated(
since = "iOS 7.0-13.0, tvOS 9.0-13.0",
note = "UILaunchImages has been deprecated; use Xcode launch storyboards instead."
)]
#[serde(
rename = "UILaunchImages",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_images: Option<Vec<LaunchImage>>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchImage {
pub default: String,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum GpuEjectPolicy {
#[serde(rename = "relaunch")]
Relaunch,
#[serde(rename = "wait")]
Wait,
#[serde(rename = "kill")]
Kill,
#[serde(rename = "ignore")]
Ignore,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum GpuSelectionPolicy {
#[serde(rename = "avoidRemovable")]
AvoidRemovable,
#[serde(rename = "preferRemovable")]
PreferRemovable,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Default)]
pub struct StatusBarTintParameters {
#[serde(
rename = "UINavigationBar",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub navigation_bar: Option<NavigationBar>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Default)]
pub struct NavigationBar {
#[serde(rename = "BackgroundImage")]
pub background_image: String,
#[serde(rename = "Style")]
pub style: BarStyle,
#[serde(rename = "Translucent")]
pub translucent: bool,
#[serde(
rename = "TintColor",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub tint_color: Option<TintColor>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum BarStyle {
#[serde(rename = "UIBarStyleDefault")]
Default,
#[serde(rename = "UIBarStyleBlack")]
Black,
}
impl Default for BarStyle {
fn default() -> Self {
Self::Default
}
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Default)]
pub struct TintColor {
#[serde(rename = "Blue")]
pub blue: f32,
#[serde(rename = "Green")]
pub green: f32,
#[serde(rename = "Red")]
pub red: f32,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum StatusBarStyle {
#[serde(rename = "UIStatusBarStyleDefault")]
Default,
#[serde(rename = "UIStatusBarStyleBlackTranslucent")]
BlackTranslucent,
#[serde(rename = "UIStatusBarStyleBlackOpaque")]
BlackOpaque,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum WhitePointAdaptivityStyle {
#[serde(rename = "UIWhitePointAdaptivityStyleStandard")]
Standard,
#[serde(rename = "UIWhitePointAdaptivityStyleReading")]
Reading,
#[serde(rename = "UIWhitePointAdaptivityStylePhoto")]
Photo,
#[serde(rename = "UIWhitePointAdaptivityStyleVideo")]
Video,
#[serde(rename = "UIWhitePointAdaptivityStyleGame")]
Game,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum UserInterfaceStyle {
Automatic,
Light,
Dark,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
pub enum InterfaceOrientation {
#[serde(rename = "UIInterfaceOrientationPortrait")]
Portrait,
#[serde(rename = "UIInterfaceOrientationPortraitUpsideDown")]
PortraitUpsideDown,
#[serde(rename = "UIInterfaceOrientationLandscapeLeft")]
LandscapeLeft,
#[serde(rename = "UIInterfaceOrientationLandscapeRight")]
LandscapeRight,
}
impl FromStr for InterfaceOrientation {
type Err = Box<dyn std::error::Error>;
fn from_str(s: &str) -> Result<InterfaceOrientation, Self::Err> {
match s {
"portrait" => Ok(InterfaceOrientation::Portrait),
"portrait-upside-down" => Ok(InterfaceOrientation::PortraitUpsideDown),
"landscape-left" => Ok(InterfaceOrientation::LandscapeLeft),
"landscape-right" => Ok(InterfaceOrientation::LandscapeRight),
_ => Err(s.into()),
}
}
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct BundleIcons {
#[serde(
rename = "CFBundleAlternateIcons",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_alternate_icons: Option<BTreeMap<String, AppIconReferenceName>>,
#[serde(rename = "CFBundlePrimaryIcon")]
pub bundle_primary_icon: BundlePrimaryIcon,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct AppIconReferenceName {
#[serde(
rename = "CFBundleIconFiles",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_icon_files: Option<Vec<String>>,
#[serde(
rename = "UIPrerenderedIcon",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub prerendered_icon: Option<bool>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct BundlePrimaryIcon {
#[serde(rename = "CFBundleIconFiles")]
pub bundle_icon_files: Vec<String>,
#[serde(
rename = "CFBundleSymbolName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub bundle_symbol_name: Option<String>,
#[serde(rename = "UIPrerenderedIcon")]
pub prerendered_icon: bool,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchScreen {
#[serde(
rename = "UIColorName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub color_name: Option<String>,
#[serde(
rename = "UIImageName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub image_name: Option<String>,
#[serde(
rename = "UIImageRespectsSafeAreaInsets",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub image_respects_safe_area_insets: Option<bool>,
#[serde(
rename = "UINavigationBar",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub navigation_bar: Option<Bar>,
#[serde(
rename = "UITabBar",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub tab_bar: Option<Bar>,
#[serde(
rename = "UIToolbar",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub toolbar: Option<Bar>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct Bar {
#[serde(
rename = "UIImageName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub image_name: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchScreens {
#[serde(
rename = "UILaunchScreenDefinitions",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_screen_definitions: Option<LaunchScreenDefinitions>,
#[serde(
rename = "UIURLToLaunchScreenAssociations",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub url_to_launch_screen_associations: Option<BTreeMap<String, String>>,
#[serde(
rename = "UIDefaultLaunchScreen",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub default_launch_screen: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchScreenDefinitions {
#[serde(
rename = "UIColorName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub color_name: Option<String>,
#[serde(flatten)]
pub launch_screen: LaunchScreen,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchStoryboards {
#[serde(
rename = "UIDefaultLaunchStoryboard",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub default_launch_storyboard: Option<String>,
#[serde(
rename = "UILaunchStoryboardDefinitions",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_storyboard_definitions: Option<Vec<LaunchStoryboardDefinition>>,
#[serde(
rename = "UIURLToLaunchStoryboardAssociations",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub url_to_launch_storyboard_associations: Option<BTreeMap<String, String>>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct LaunchStoryboardDefinition {
#[serde(
rename = "UILaunchStoryboardFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_storyboard_file: Option<String>,
#[serde(
rename = "UILaunchStoryboardIdentifier",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub launch_storyboard_identifier: Option<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct ApplicationSceneManifest {
#[serde(
rename = "UIApplicationSupportsMultipleScenes",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub enable_multiple_windows: Option<bool>,
#[serde(
flatten,
rename = "UISceneConfigurations",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub scene_configurations: Option<SceneConfigurations>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct SceneConfigurations {
#[serde(
flatten,
rename = "UIWindowSceneSessionRoleApplication",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub application_session_role: Option<WindowSceneSessionRole>,
#[serde(
flatten,
rename = "UIWindowSceneSessionRoleExternalDisplay",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub external_display_session_role: Option<WindowSceneSessionRole>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default)]
pub struct WindowSceneSessionRole {
#[serde(
rename = "UISceneConfigurationName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub configuration_name: Option<String>,
#[serde(
rename = "UISceneClassName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub class_name: Option<String>,
#[serde(
rename = "UISceneDelegateClassName",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub delegate_class_name: Option<String>,
#[serde(
rename = "UISceneStoryboardFile",
serialize_with = "crate::serialize_option",
skip_serializing_if = "Option::is_none"
)]
pub storyboard_name: Option<String>,
}