Skip to main content

bevy_window/
monitor.rs

1use alloc::{string::String, vec::Vec};
2use bevy_ecs::{component::Component, entity::Entity};
3use bevy_math::{IVec2, UVec2};
4
5#[cfg(all(feature = "serialize", feature = "bevy_reflect"))]
6use bevy_reflect::{ReflectDeserialize, ReflectSerialize};
7#[cfg(feature = "bevy_reflect")]
8use {bevy_ecs::prelude::ReflectComponent, bevy_reflect::Reflect};
9
10/// Represents an available monitor as reported by the user's operating system, which can be used
11/// to query information about the display, such as its size, position, and video modes.
12///
13/// Each monitor corresponds to an entity and can be used to position a monitor using
14/// [`MonitorSelection::Entity`](`crate::window::MonitorSelection::Entity`).
15///
16/// # Warning
17///
18/// This component is synchronized with `winit` through `bevy_winit`, but is effectively
19/// read-only as `winit` does not support changing monitor properties.
20#[derive(#[doc =
"**Required Components**: [`HasWindows`]. \n\n A component's Required Components are inserted whenever it is inserted. Note that this will also insert the required components _of_ the required components, recursively, in depth-first order."]
impl bevy_ecs::component::Component for Monitor where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {
        required_components.register_required::<HasWindows>(<HasWindows as
                ::core::default::Default>::default);
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}Component, #[automatically_derived]impl ::core::fmt::Debug for Monitor {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        let names: &'static _ =
            &["name", "physical_height", "physical_width",
                        "physical_position", "refresh_rate_millihertz",
                        "scale_factor", "video_modes"];
        let values: &[&dyn ::core::fmt::Debug] =
            &[&self.name, &self.physical_height, &self.physical_width,
                        &self.physical_position, &self.refresh_rate_millihertz,
                        &self.scale_factor, &&self.video_modes];
        ::core::fmt::Formatter::debug_struct_fields_finish(f, "Monitor",
            names, values)
    }
}Debug, #[automatically_derived]impl ::core::clone::Clone for Monitor {
    #[inline]
    fn clone(&self) -> Self {
        Monitor {
            name: ::core::clone::Clone::clone(&self.name),
            physical_height: ::core::clone::Clone::clone(&self.physical_height),
            physical_width: ::core::clone::Clone::clone(&self.physical_width),
            physical_position: ::core::clone::Clone::clone(&self.physical_position),
            refresh_rate_millihertz: ::core::clone::Clone::clone(&self.refresh_rate_millihertz),
            scale_factor: ::core::clone::Clone::clone(&self.scale_factor),
            video_modes: ::core::clone::Clone::clone(&self.video_modes),
        }
    }
}Clone)]
21#[require(HasWindows)]
22#[cfg_attr(
23    feature = "bevy_reflect",
24    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for Monitor where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration.register_type_data_with::<ReflectSerialize, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDeserialize,
                    Self, _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <Option<String> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <u32 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <IVec2 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Option<u32> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <f64 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <Vec<VideoMode> as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for Monitor where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<Option<String>>("name"),
                                                bevy_reflect::NamedField::new::<u32>("physical_height"),
                                                bevy_reflect::NamedField::new::<u32>("physical_width"),
                                                bevy_reflect::NamedField::new::<IVec2>("physical_position"),
                                                bevy_reflect::NamedField::new::<Option<u32>>("refresh_rate_millihertz"),
                                                bevy_reflect::NamedField::new::<f64>("scale_factor"),
                                                bevy_reflect::NamedField::new::<Vec<VideoMode>>("video_modes")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for Monitor where  {
            fn type_path() -> &'static str { "bevy_window::monitor::Monitor" }
            fn short_type_path() -> &'static str { "Monitor" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("Monitor")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::monitor".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::monitor")
            }
        }
        impl bevy_reflect::Reflect for Monitor where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<Monitor
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for Monitor where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "name" => ::core::option::Option::Some(&self.name),
                    "physical_height" =>
                        ::core::option::Option::Some(&self.physical_height),
                    "physical_width" =>
                        ::core::option::Option::Some(&self.physical_width),
                    "physical_position" =>
                        ::core::option::Option::Some(&self.physical_position),
                    "refresh_rate_millihertz" =>
                        ::core::option::Option::Some(&self.refresh_rate_millihertz),
                    "scale_factor" =>
                        ::core::option::Option::Some(&self.scale_factor),
                    "video_modes" =>
                        ::core::option::Option::Some(&self.video_modes),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "name" => ::core::option::Option::Some(&mut self.name),
                    "physical_height" =>
                        ::core::option::Option::Some(&mut self.physical_height),
                    "physical_width" =>
                        ::core::option::Option::Some(&mut self.physical_width),
                    "physical_position" =>
                        ::core::option::Option::Some(&mut self.physical_position),
                    "refresh_rate_millihertz" =>
                        ::core::option::Option::Some(&mut self.refresh_rate_millihertz),
                    "scale_factor" =>
                        ::core::option::Option::Some(&mut self.scale_factor),
                    "video_modes" =>
                        ::core::option::Option::Some(&mut self.video_modes),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.name),
                    1usize =>
                        ::core::option::Option::Some(&self.physical_height),
                    2usize =>
                        ::core::option::Option::Some(&self.physical_width),
                    3usize =>
                        ::core::option::Option::Some(&self.physical_position),
                    4usize =>
                        ::core::option::Option::Some(&self.refresh_rate_millihertz),
                    5usize => ::core::option::Option::Some(&self.scale_factor),
                    6usize => ::core::option::Option::Some(&self.video_modes),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&mut self.name),
                    1usize =>
                        ::core::option::Option::Some(&mut self.physical_height),
                    2usize =>
                        ::core::option::Option::Some(&mut self.physical_width),
                    3usize =>
                        ::core::option::Option::Some(&mut self.physical_position),
                    4usize =>
                        ::core::option::Option::Some(&mut self.refresh_rate_millihertz),
                    5usize =>
                        ::core::option::Option::Some(&mut self.scale_factor),
                    6usize =>
                        ::core::option::Option::Some(&mut self.video_modes),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("name"),
                    1usize => ::core::option::Option::Some("physical_height"),
                    2usize => ::core::option::Option::Some("physical_width"),
                    3usize => ::core::option::Option::Some("physical_position"),
                    4usize =>
                        ::core::option::Option::Some("refresh_rate_millihertz"),
                    5usize => ::core::option::Option::Some("scale_factor"),
                    6usize => ::core::option::Option::Some("video_modes"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "name" => ::core::option::Option::Some(0usize),
                    "physical_height" => ::core::option::Option::Some(1usize),
                    "physical_width" => ::core::option::Option::Some(2usize),
                    "physical_position" => ::core::option::Option::Some(3usize),
                    "refresh_rate_millihertz" =>
                        ::core::option::Option::Some(4usize),
                    "scale_factor" => ::core::option::Option::Some(5usize),
                    "video_modes" => ::core::option::Option::Some(6usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 7usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("name",
                    bevy_reflect::PartialReflect::to_dynamic(&self.name)?);
                dynamic.insert_boxed("physical_height",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_height)?);
                dynamic.insert_boxed("physical_width",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_width)?);
                dynamic.insert_boxed("physical_position",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_position)?);
                dynamic.insert_boxed("refresh_rate_millihertz",
                    bevy_reflect::PartialReflect::to_dynamic(&self.refresh_rate_millihertz)?);
                dynamic.insert_boxed("scale_factor",
                    bevy_reflect::PartialReflect::to_dynamic(&self.scale_factor)?);
                dynamic.insert_boxed("video_modes",
                    bevy_reflect::PartialReflect::to_dynamic(&self.video_modes)?);
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for Monitor where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for Monitor where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let __this =
                        Self {
                            name: <Option<String> as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "name")?)?,
                            physical_height: <u32 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "physical_height")?)?,
                            physical_width: <u32 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "physical_width")?)?,
                            physical_position: <IVec2 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "physical_position")?)?,
                            refresh_rate_millihertz: <Option<u32> as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "refresh_rate_millihertz")?)?,
                            scale_factor: <f64 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "scale_factor")?)?,
                            video_modes: <Vec<VideoMode> as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "video_modes")?)?,
                        };
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
25    reflect(Component, Debug, Clone)
26)]
27#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for Monitor {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private229::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "Monitor", false as usize + 1 + 1 + 1 + 1 + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "name", &self.name)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_height", &self.physical_height)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_width", &self.physical_width)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_position", &self.physical_position)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "refresh_rate_millihertz", &self.refresh_rate_millihertz)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "scale_factor", &self.scale_factor)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "video_modes", &self.video_modes)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for Monitor {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private229::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field {
                    __field0,
                    __field1,
                    __field2,
                    __field3,
                    __field4,
                    __field5,
                    __field6,
                    __ignore,
                }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private229::Formatter)
                        -> _serde::__private229::fmt::Result {
                        _serde::__private229::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private229::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private229::Ok(__Field::__field0),
                            1u64 => _serde::__private229::Ok(__Field::__field1),
                            2u64 => _serde::__private229::Ok(__Field::__field2),
                            3u64 => _serde::__private229::Ok(__Field::__field3),
                            4u64 => _serde::__private229::Ok(__Field::__field4),
                            5u64 => _serde::__private229::Ok(__Field::__field5),
                            6u64 => _serde::__private229::Ok(__Field::__field6),
                            _ => _serde::__private229::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private229::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "name" => _serde::__private229::Ok(__Field::__field0),
                            "physical_height" =>
                                _serde::__private229::Ok(__Field::__field1),
                            "physical_width" =>
                                _serde::__private229::Ok(__Field::__field2),
                            "physical_position" =>
                                _serde::__private229::Ok(__Field::__field3),
                            "refresh_rate_millihertz" =>
                                _serde::__private229::Ok(__Field::__field4),
                            "scale_factor" =>
                                _serde::__private229::Ok(__Field::__field5),
                            "video_modes" =>
                                _serde::__private229::Ok(__Field::__field6),
                            _ => { _serde::__private229::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private229::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"name" => _serde::__private229::Ok(__Field::__field0),
                            b"physical_height" =>
                                _serde::__private229::Ok(__Field::__field1),
                            b"physical_width" =>
                                _serde::__private229::Ok(__Field::__field2),
                            b"physical_position" =>
                                _serde::__private229::Ok(__Field::__field3),
                            b"refresh_rate_millihertz" =>
                                _serde::__private229::Ok(__Field::__field4),
                            b"scale_factor" =>
                                _serde::__private229::Ok(__Field::__field5),
                            b"video_modes" =>
                                _serde::__private229::Ok(__Field::__field6),
                            _ => { _serde::__private229::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private229::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private229::PhantomData<Monitor>,
                    lifetime: _serde::__private229::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = Monitor;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private229::Formatter)
                        -> _serde::__private229::fmt::Result {
                        _serde::__private229::Formatter::write_str(__formatter,
                            "struct Monitor")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private229::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<Option<String>>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        let __field3 =
                            match _serde::de::SeqAccess::next_element::<IVec2>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(3usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        let __field4 =
                            match _serde::de::SeqAccess::next_element::<Option<u32>>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(4usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        let __field5 =
                            match _serde::de::SeqAccess::next_element::<f64>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(5usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        let __field6 =
                            match _serde::de::SeqAccess::next_element::<Vec<VideoMode>>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(6usize,
                                                &"struct Monitor with 7 elements")),
                            };
                        _serde::__private229::Ok(Monitor {
                                name: __field0,
                                physical_height: __field1,
                                physical_width: __field2,
                                physical_position: __field3,
                                refresh_rate_millihertz: __field4,
                                scale_factor: __field5,
                                video_modes: __field6,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private229::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0:
                                _serde::__private229::Option<Option<String>> =
                            _serde::__private229::None;
                        let mut __field1: _serde::__private229::Option<u32> =
                            _serde::__private229::None;
                        let mut __field2: _serde::__private229::Option<u32> =
                            _serde::__private229::None;
                        let mut __field3: _serde::__private229::Option<IVec2> =
                            _serde::__private229::None;
                        let mut __field4:
                                _serde::__private229::Option<Option<u32>> =
                            _serde::__private229::None;
                        let mut __field5: _serde::__private229::Option<f64> =
                            _serde::__private229::None;
                        let mut __field6:
                                _serde::__private229::Option<Vec<VideoMode>> =
                            _serde::__private229::None;
                        while let _serde::__private229::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private229::Option::is_some(&__field0) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("name"));
                                    }
                                    __field0 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<Option<String>>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private229::Option::is_some(&__field1) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_height"));
                                    }
                                    __field1 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private229::Option::is_some(&__field2) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_width"));
                                    }
                                    __field2 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
                                }
                                __Field::__field3 => {
                                    if _serde::__private229::Option::is_some(&__field3) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_position"));
                                    }
                                    __field3 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<IVec2>(&mut __map)?);
                                }
                                __Field::__field4 => {
                                    if _serde::__private229::Option::is_some(&__field4) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("refresh_rate_millihertz"));
                                    }
                                    __field4 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<Option<u32>>(&mut __map)?);
                                }
                                __Field::__field5 => {
                                    if _serde::__private229::Option::is_some(&__field5) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("scale_factor"));
                                    }
                                    __field5 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<f64>(&mut __map)?);
                                }
                                __Field::__field6 => {
                                    if _serde::__private229::Option::is_some(&__field6) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("video_modes"));
                                    }
                                    __field6 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<Vec<VideoMode>>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private229::Some(__field0) => __field0,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("name")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private229::Some(__field1) => __field1,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("physical_height")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private229::Some(__field2) => __field2,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("physical_width")?,
                            };
                        let __field3 =
                            match __field3 {
                                _serde::__private229::Some(__field3) => __field3,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("physical_position")?,
                            };
                        let __field4 =
                            match __field4 {
                                _serde::__private229::Some(__field4) => __field4,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("refresh_rate_millihertz")?,
                            };
                        let __field5 =
                            match __field5 {
                                _serde::__private229::Some(__field5) => __field5,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("scale_factor")?,
                            };
                        let __field6 =
                            match __field6 {
                                _serde::__private229::Some(__field6) => __field6,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("video_modes")?,
                            };
                        _serde::__private229::Ok(Monitor {
                                name: __field0,
                                physical_height: __field1,
                                physical_width: __field2,
                                physical_position: __field3,
                                refresh_rate_millihertz: __field4,
                                scale_factor: __field5,
                                video_modes: __field6,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["name", "physical_height", "physical_width",
                                "physical_position", "refresh_rate_millihertz",
                                "scale_factor", "video_modes"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "Monitor", FIELDS,
                    __Visitor {
                        marker: _serde::__private229::PhantomData::<Monitor>,
                        lifetime: _serde::__private229::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
28#[cfg_attr(
29    all(feature = "serialize", feature = "bevy_reflect"),
30    reflect(Serialize, Deserialize)
31)]
32pub struct Monitor {
33    /// The name of the monitor
34    pub name: Option<String>,
35    /// The height of the monitor in physical pixels
36    pub physical_height: u32,
37    /// The width of the monitor in physical pixels
38    pub physical_width: u32,
39    /// The position of the monitor in physical pixels
40    pub physical_position: IVec2,
41    /// The refresh rate of the monitor in millihertz
42    pub refresh_rate_millihertz: Option<u32>,
43    /// The scale factor of the monitor
44    pub scale_factor: f64,
45    /// The video modes that the monitor supports
46    pub video_modes: Vec<VideoMode>,
47}
48
49/// A marker component for the primary monitor
50#[derive(impl bevy_ecs::component::Component for PrimaryMonitor where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {}
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::component::{
            DefaultCloneBehaviorBase, DefaultCloneBehaviorViaClone,
        };
        (&&&bevy_ecs::component::DefaultCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::None
    }
}Component, #[automatically_derived]impl ::core::fmt::Debug for PrimaryMonitor {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::write_str(f, "PrimaryMonitor")
    }
}Debug, #[automatically_derived]impl ::core::clone::Clone for PrimaryMonitor {
    #[inline]
    fn clone(&self) -> Self { PrimaryMonitor }
}Clone)]
51#[cfg_attr(
52    feature = "bevy_reflect",
53    derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for PrimaryMonitor where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectComponent, Self,
                    _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {}
        }
        impl bevy_reflect::Typed for PrimaryMonitor where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for PrimaryMonitor where  {
            fn type_path() -> &'static str {
                "bevy_window::monitor::PrimaryMonitor"
            }
            fn short_type_path() -> &'static str { "PrimaryMonitor" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("PrimaryMonitor")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::monitor".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::monitor")
            }
        }
        impl bevy_reflect::Reflect for PrimaryMonitor where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<PrimaryMonitor
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for PrimaryMonitor where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index { _ => ::core::option::Option::None, }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index { _ => ::core::option::Option::None, }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name { _ => ::core::option::Option::None, }
            }
            fn field_len(&self) -> usize { 0usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for PrimaryMonitor where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for PrimaryMonitor where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let __this = Self {};
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect),
54    reflect(Component, Debug, Clone)
55)]
56pub struct PrimaryMonitor;
57
58/// A relationship for all Windows on a specific Monitor.
59#[derive(impl bevy_ecs::component::Component for HasWindows where
    Self: ::core::marker::Send + ::core::marker::Sync + 'static {
    const STORAGE_TYPE: bevy_ecs::component::StorageType =
        bevy_ecs::component::StorageType::Table;
    type Mutability = bevy_ecs::component::Mutable;
    fn register_required_components(_requiree:
            bevy_ecs::component::ComponentId,
        required_components:
            &mut bevy_ecs::component::RequiredComponentsRegistrator) {}
    fn on_discard()
        -> ::core::option::Option<bevy_ecs::lifecycle::ComponentHook> {
        ::core::option::Option::Some(<Self as
                bevy_ecs::relationship::RelationshipTarget>::on_discard)
    }
    fn on_despawn()
        -> ::core::option::Option<bevy_ecs::lifecycle::ComponentHook> {
        ::core::option::Option::Some(<Self as
                bevy_ecs::relationship::RelationshipTarget>::on_despawn)
    }
    fn clone_behavior() -> bevy_ecs::component::ComponentCloneBehavior {
        use bevy_ecs::relationship::{
            RelationshipCloneBehaviorBase, RelationshipCloneBehaviorViaClone,
            RelationshipCloneBehaviorViaReflect,
            RelationshipTargetCloneBehaviorViaClone,
            RelationshipTargetCloneBehaviorViaReflect,
            RelationshipTargetCloneBehaviorHierarchy,
        };
        (&&&&&&&bevy_ecs::relationship::RelationshipCloneBehaviorSpecialization::<Self>::default()).default_clone_behavior()
    }
    fn map_entities<M: bevy_ecs::entity::EntityMapper>(this: &mut Self,
        mapper: &mut M) {
        use bevy_ecs::entity::MapEntities;
        this.0.map_entities(mapper);
    }
    fn relationship_accessor()
        ->
            ::core::option::Option<bevy_ecs::relationship::ComponentRelationshipAccessor<Self>> {
        ::core::option::Option::Some(bevy_ecs::relationship::ComponentRelationshipAccessor::<Self>::relationship_target())
    }
}
impl bevy_ecs::relationship::RelationshipTarget for HasWindows {
    const LINKED_SPAWN: bool = true;
    type Relationship = crate::window::OnMonitor;
    type Collection = Vec<Entity>;
    #[inline]
    fn collection(&self) -> &Self::Collection { &self.0 }
    #[inline]
    fn collection_mut_risky(&mut self) -> &mut Self::Collection {
        &mut self.0
    }
    #[inline]
    fn from_collection_risky(collection: Self::Collection) -> Self {
        Self { 0: collection }
    }
}Component, #[automatically_derived]impl ::core::fmt::Debug for HasWindows {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_tuple_field1_finish(f, "HasWindows",
            &&self.0)
    }
}Debug, #[automatically_derived]impl ::core::default::Default for HasWindows {
    #[inline]
    fn default() -> Self { HasWindows(::core::default::Default::default()) }
}Default)]
60#[relationship_target(relationship = crate::window::OnMonitor, linked_spawn)]
61pub struct HasWindows(Vec<Entity>);
62
63impl Monitor {
64    /// Returns the physical size of the monitor in pixels
65    pub fn physical_size(&self) -> UVec2 {
66        UVec2::new(self.physical_width, self.physical_height)
67    }
68}
69
70/// Represents a video mode that a monitor supports
71#[derive(#[automatically_derived]impl ::core::fmt::Debug for VideoMode {
    #[inline]
    fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
        ::core::fmt::Formatter::debug_struct_field3_finish(f, "VideoMode",
            "physical_size", &self.physical_size, "bit_depth",
            &self.bit_depth, "refresh_rate_millihertz",
            &&self.refresh_rate_millihertz)
    }
}Debug, #[automatically_derived]#[doc(hidden)]unsafe impl ::core::clone::TrivialClone
    for VideoMode {
}
#[automatically_derived]impl ::core::clone::Clone for VideoMode {
    #[inline]
    fn clone(&self) -> Self {
        let _: ::core::clone::AssertParamIsClone<UVec2>;
        let _: ::core::clone::AssertParamIsClone<u16>;
        let _: ::core::clone::AssertParamIsClone<u32>;
        *self
    }
}Clone, #[automatically_derived]impl ::core::marker::Copy for VideoMode { }Copy, #[automatically_derived]impl ::core::marker::StructuralPartialEq for VideoMode
    {
}
#[automatically_derived]impl ::core::cmp::PartialEq for VideoMode {
    #[inline]
    fn eq(&self, other: &Self) -> bool {
        self.bit_depth == other.bit_depth &&
                self.refresh_rate_millihertz == other.refresh_rate_millihertz
            && self.physical_size == other.physical_size
    }
}PartialEq, #[automatically_derived]impl ::core::cmp::Eq for VideoMode {
    #[inline]
    #[doc(hidden)]
    #[coverage(off)]
    fn assert_fields_are_eq(&self) {
        let _: ::core::cmp::AssertParamIsEq<UVec2>;
        let _: ::core::cmp::AssertParamIsEq<u16>;
        let _: ::core::cmp::AssertParamIsEq<u32>;
    }
}Eq)]
72#[cfg_attr(feature = "bevy_reflect", derive(const _: () =
    {
        impl bevy_reflect::GetTypeRegistration for VideoMode where  {
            fn get_type_registration() -> bevy_reflect::TypeRegistration {
                let mut registration =
                    bevy_reflect::TypeRegistration::of::<Self>();
                registration.insert(<bevy_reflect::ReflectFromPtr as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.insert(<bevy_reflect::ReflectFromReflect as
                            bevy_reflect::CreateTypeData<Self>>::create_type_data(()));
                registration.register_type_data_with::<ReflectSerialize, Self,
                    _>(());
                registration.register_type_data_with::<ReflectDeserialize,
                    Self, _>(());
                registration
            }
            #[inline(never)]
            fn register_type_dependencies(registry:
                    &mut bevy_reflect::TypeRegistry) {
                <UVec2 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <u16 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
                <u32 as
                        bevy_reflect::__macro_exports::RegisterForReflection>::__register(registry);
            }
        }
        impl bevy_reflect::Typed for VideoMode where  {
            #[inline(never)]
            fn type_info() -> &'static bevy_reflect::TypeInfo {
                static CELL: bevy_reflect::utility::NonGenericTypeInfoCell =
                    bevy_reflect::utility::NonGenericTypeInfoCell::new();
                CELL.get_or_set(#[inline(never)] ||
                        {
                            bevy_reflect::TypeInfo::Struct(bevy_reflect::structs::StructInfo::new::<Self>(&[bevy_reflect::NamedField::new::<UVec2>("physical_size"),
                                                bevy_reflect::NamedField::new::<u16>("bit_depth"),
                                                bevy_reflect::NamedField::new::<u32>("refresh_rate_millihertz")]))
                        })
            }
        }
        #[allow(deprecated, reason =
        "derives on a deprecated type shouldn't be considered a usage")]
        impl bevy_reflect::TypePath for VideoMode where  {
            fn type_path() -> &'static str {
                "bevy_window::monitor::VideoMode"
            }
            fn short_type_path() -> &'static str { "VideoMode" }
            fn type_ident() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("VideoMode")
            }
            fn crate_name() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::monitor".split(':').next().unwrap())
            }
            fn module_path() -> ::core::option::Option<&'static str> {
                ::core::option::Option::Some("bevy_window::monitor")
            }
        }
        impl bevy_reflect::Reflect for VideoMode where  {
            #[inline]
            fn into_any(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn ::core::any::Any> {
                self
            }
            #[inline]
            fn as_any(&self) -> &dyn ::core::any::Any { self }
            #[inline]
            fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { self }
            #[inline]
            fn into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect> {
                self
            }
            #[inline]
            fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { self }
            #[inline]
            fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect {
                self
            }
            #[inline]
            fn set(&mut self,
                value:
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>)
                ->
                    ::core::result::Result<(),
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>> {
                *self = <dyn bevy_reflect::Reflect>::take(value)?;
                ::core::result::Result::Ok(())
            }
        }
        #[allow(non_upper_case_globals)]
        const _: () =
            {
                static __INVENTORY: ::inventory::Node =
                    ::inventory::Node {
                        value: &{
                                bevy_reflect::__macro_exports::auto_register::AutomaticReflectRegistrations(<VideoMode
                                        as
                                        bevy_reflect::__macro_exports::auto_register::RegisterForReflection>::__register)
                            },
                        next: ::inventory::__private::UnsafeCell::new(::inventory::__private::Option::None),
                    };
                #[link_section = ".text.startup"]
                unsafe extern "C" fn __ctor() {
                    unsafe {
                        ::inventory::ErasedNode::submit(__INVENTORY.value,
                            &__INVENTORY)
                    }
                }
                #[used]
                #[link_section = ".init_array"]
                static __CTOR: unsafe extern "C" fn() = __ctor;
            };
        impl bevy_reflect::structs::Struct for VideoMode where  {
            fn field(&self, name: &str)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match name {
                    "physical_size" =>
                        ::core::option::Option::Some(&self.physical_size),
                    "bit_depth" =>
                        ::core::option::Option::Some(&self.bit_depth),
                    "refresh_rate_millihertz" =>
                        ::core::option::Option::Some(&self.refresh_rate_millihertz),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_mut(&mut self, name: &str)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match name {
                    "physical_size" =>
                        ::core::option::Option::Some(&mut self.physical_size),
                    "bit_depth" =>
                        ::core::option::Option::Some(&mut self.bit_depth),
                    "refresh_rate_millihertz" =>
                        ::core::option::Option::Some(&mut self.refresh_rate_millihertz),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at(&self, index: usize)
                -> ::core::option::Option<&dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize => ::core::option::Option::Some(&self.physical_size),
                    1usize => ::core::option::Option::Some(&self.bit_depth),
                    2usize =>
                        ::core::option::Option::Some(&self.refresh_rate_millihertz),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_at_mut(&mut self, index: usize)
                ->
                    ::core::option::Option<&mut dyn bevy_reflect::PartialReflect> {
                match index {
                    0usize =>
                        ::core::option::Option::Some(&mut self.physical_size),
                    1usize => ::core::option::Option::Some(&mut self.bit_depth),
                    2usize =>
                        ::core::option::Option::Some(&mut self.refresh_rate_millihertz),
                    _ => ::core::option::Option::None,
                }
            }
            fn name_at(&self, index: usize) -> ::core::option::Option<&str> {
                match index {
                    0usize => ::core::option::Option::Some("physical_size"),
                    1usize => ::core::option::Option::Some("bit_depth"),
                    2usize =>
                        ::core::option::Option::Some("refresh_rate_millihertz"),
                    _ => ::core::option::Option::None,
                }
            }
            fn index_of_name(&self, name: &str)
                -> ::core::option::Option<usize> {
                match name {
                    "physical_size" => ::core::option::Option::Some(0usize),
                    "bit_depth" => ::core::option::Option::Some(1usize),
                    "refresh_rate_millihertz" =>
                        ::core::option::Option::Some(2usize),
                    _ => ::core::option::Option::None,
                }
            }
            fn field_len(&self) -> usize { 3usize }
            fn iter_fields(&self) -> bevy_reflect::structs::FieldIter {
                bevy_reflect::structs::FieldIter::new(self)
            }
            fn to_dynamic_struct(&self)
                ->
                    ::core::result::Result<bevy_reflect::structs::DynamicStruct,
                    bevy_reflect::ReflectCloneError> {
                let mut dynamic: bevy_reflect::structs::DynamicStruct =
                    ::core::default::Default::default();
                dynamic.set_represented_type(bevy_reflect::PartialReflect::get_represented_type_info(self));
                dynamic.insert_boxed("physical_size",
                    bevy_reflect::PartialReflect::to_dynamic(&self.physical_size)?);
                dynamic.insert_boxed("bit_depth",
                    bevy_reflect::PartialReflect::to_dynamic(&self.bit_depth)?);
                dynamic.insert_boxed("refresh_rate_millihertz",
                    bevy_reflect::PartialReflect::to_dynamic(&self.refresh_rate_millihertz)?);
                ::core::result::Result::Ok(dynamic)
            }
        }
        impl bevy_reflect::PartialReflect for VideoMode where  {
            #[inline]
            fn get_represented_type_info(&self)
                -> ::core::option::Option<&'static bevy_reflect::TypeInfo> {
                ::core::option::Option::Some(<Self as
                            bevy_reflect::Typed>::type_info())
            }
            #[inline]
            fn try_apply(&mut self, value: &dyn bevy_reflect::PartialReflect)
                -> ::core::result::Result<(), bevy_reflect::ApplyError> {
                if let bevy_reflect::ReflectRef::Struct(struct_value) =
                        bevy_reflect::PartialReflect::reflect_ref(value) {
                    for (name, value) in
                        bevy_reflect::structs::Struct::iter_fields(struct_value) {
                        if let ::core::option::Option::Some(v) =
                                bevy_reflect::structs::Struct::field_mut(self, name) {
                            bevy_reflect::PartialReflect::try_apply(v, value)?;
                        }
                    }
                } else {
                    return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds {
                                from_kind: bevy_reflect::PartialReflect::reflect_kind(value),
                                to_kind: bevy_reflect::ReflectKind::Struct,
                            });
                }
                ::core::result::Result::Ok(())
            }
            #[inline]
            fn reflect_kind(&self) -> bevy_reflect::ReflectKind {
                bevy_reflect::ReflectKind::Struct
            }
            #[inline]
            fn reflect_ref(&self) -> bevy_reflect::ReflectRef {
                bevy_reflect::ReflectRef::Struct(self)
            }
            #[inline]
            fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut {
                bevy_reflect::ReflectMut::Struct(self)
            }
            #[inline]
            fn reflect_owned(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                -> bevy_reflect::ReflectOwned {
                bevy_reflect::ReflectOwned::Struct(self)
            }
            #[inline]
            fn try_into_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect>> {
                ::core::result::Result::Ok(self)
            }
            #[inline]
            fn try_as_reflect(&self)
                -> ::core::option::Option<&dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn try_as_reflect_mut(&mut self)
                -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> {
                ::core::option::Option::Some(self)
            }
            #[inline]
            fn into_partial_reflect(self:
                    bevy_reflect::__macro_exports::alloc_utils::Box<Self>)
                ->
                    bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::PartialReflect> {
                self
            }
            #[inline]
            fn as_partial_reflect(&self)
                -> &dyn bevy_reflect::PartialReflect {
                self
            }
            #[inline]
            fn as_partial_reflect_mut(&mut self)
                -> &mut dyn bevy_reflect::PartialReflect {
                self
            }
            fn reflect_partial_eq(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<bool> {
                (bevy_reflect::structs::struct_partial_eq)(self, value)
            }
            fn reflect_partial_cmp(&self,
                value: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<::core::cmp::Ordering> {
                (bevy_reflect::structs::struct_partial_cmp)(self, value)
            }
            fn debug(&self, f: &mut ::core::fmt::Formatter<'_>)
                -> ::core::fmt::Result {
                ::core::fmt::Debug::fmt(self, f)
            }
            #[inline]
            fn reflect_clone(&self)
                ->
                    ::core::result::Result<bevy_reflect::__macro_exports::alloc_utils::Box<dyn bevy_reflect::Reflect>,
                    bevy_reflect::ReflectCloneError> {
                ::core::result::Result::Ok(bevy_reflect::__macro_exports::alloc_utils::Box::new(::core::clone::Clone::clone(self)))
            }
        }
        impl bevy_reflect::FromReflect for VideoMode where  {
            fn from_reflect(reflect: &dyn bevy_reflect::PartialReflect)
                -> ::core::option::Option<Self> {
                if let bevy_reflect::ReflectRef::Struct(__ref_struct) =
                        bevy_reflect::PartialReflect::reflect_ref(reflect) {
                    let __this =
                        Self {
                            physical_size: <UVec2 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "physical_size")?)?,
                            bit_depth: <u16 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "bit_depth")?)?,
                            refresh_rate_millihertz: <u32 as
                                        bevy_reflect::FromReflect>::from_reflect(bevy_reflect::structs::Struct::field(__ref_struct,
                                            "refresh_rate_millihertz")?)?,
                        };
                    ::core::option::Option::Some(__this)
                } else { ::core::option::Option::None }
            }
        }
    };Reflect), reflect(Debug, Clone))]
73#[cfg_attr(feature = "serialize", derive(#[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl _serde::Serialize for VideoMode {
            fn serialize<__S>(&self, __serializer: __S)
                -> _serde::__private229::Result<__S::Ok, __S::Error> where
                __S: _serde::Serializer {
                let mut __serde_state =
                    _serde::Serializer::serialize_struct(__serializer,
                            "VideoMode", false as usize + 1 + 1 + 1)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "physical_size", &self.physical_size)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "bit_depth", &self.bit_depth)?;
                _serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
                        "refresh_rate_millihertz", &self.refresh_rate_millihertz)?;
                _serde::ser::SerializeStruct::end(__serde_state)
            }
        }
    };serde::Serialize, #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications,
clippy :: absolute_paths,)]
const _: () =
    {
        #[allow(unused_extern_crates, clippy :: useless_attribute)]
        extern crate serde as _serde;
        ;
        #[automatically_derived]
        impl<'de> _serde::Deserialize<'de> for VideoMode {
            fn deserialize<__D>(__deserializer: __D)
                -> _serde::__private229::Result<Self, __D::Error> where
                __D: _serde::Deserializer<'de> {
                #[allow(non_camel_case_types)]
                #[doc(hidden)]
                enum __Field { __field0, __field1, __field2, __ignore, }
                #[doc(hidden)]
                struct __FieldVisitor;
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
                    type Value = __Field;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private229::Formatter)
                        -> _serde::__private229::fmt::Result {
                        _serde::__private229::Formatter::write_str(__formatter,
                            "field identifier")
                    }
                    fn visit_u64<__E>(self, __value: u64)
                        -> _serde::__private229::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            0u64 => _serde::__private229::Ok(__Field::__field0),
                            1u64 => _serde::__private229::Ok(__Field::__field1),
                            2u64 => _serde::__private229::Ok(__Field::__field2),
                            _ => _serde::__private229::Ok(__Field::__ignore),
                        }
                    }
                    fn visit_str<__E>(self, __value: &str)
                        -> _serde::__private229::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            "physical_size" =>
                                _serde::__private229::Ok(__Field::__field0),
                            "bit_depth" => _serde::__private229::Ok(__Field::__field1),
                            "refresh_rate_millihertz" =>
                                _serde::__private229::Ok(__Field::__field2),
                            _ => { _serde::__private229::Ok(__Field::__ignore) }
                        }
                    }
                    fn visit_bytes<__E>(self, __value: &[u8])
                        -> _serde::__private229::Result<Self::Value, __E> where
                        __E: _serde::de::Error {
                        match __value {
                            b"physical_size" =>
                                _serde::__private229::Ok(__Field::__field0),
                            b"bit_depth" => _serde::__private229::Ok(__Field::__field1),
                            b"refresh_rate_millihertz" =>
                                _serde::__private229::Ok(__Field::__field2),
                            _ => { _serde::__private229::Ok(__Field::__ignore) }
                        }
                    }
                }
                #[automatically_derived]
                impl<'de> _serde::Deserialize<'de> for __Field {
                    #[inline]
                    fn deserialize<__D>(__deserializer: __D)
                        -> _serde::__private229::Result<Self, __D::Error> where
                        __D: _serde::Deserializer<'de> {
                        _serde::Deserializer::deserialize_identifier(__deserializer,
                            __FieldVisitor)
                    }
                }
                #[doc(hidden)]
                struct __Visitor<'de> {
                    marker: _serde::__private229::PhantomData<VideoMode>,
                    lifetime: _serde::__private229::PhantomData<&'de ()>,
                }
                #[automatically_derived]
                impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
                    type Value = VideoMode;
                    fn expecting(&self,
                        __formatter: &mut _serde::__private229::Formatter)
                        -> _serde::__private229::fmt::Result {
                        _serde::__private229::Formatter::write_str(__formatter,
                            "struct VideoMode")
                    }
                    #[inline]
                    fn visit_seq<__A>(self, mut __seq: __A)
                        -> _serde::__private229::Result<Self::Value, __A::Error>
                        where __A: _serde::de::SeqAccess<'de> {
                        let __field0 =
                            match _serde::de::SeqAccess::next_element::<UVec2>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(0usize,
                                                &"struct VideoMode with 3 elements")),
                            };
                        let __field1 =
                            match _serde::de::SeqAccess::next_element::<u16>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(1usize,
                                                &"struct VideoMode with 3 elements")),
                            };
                        let __field2 =
                            match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
                                {
                                _serde::__private229::Some(__value) => __value,
                                _serde::__private229::None =>
                                    return _serde::__private229::Err(_serde::de::Error::invalid_length(2usize,
                                                &"struct VideoMode with 3 elements")),
                            };
                        _serde::__private229::Ok(VideoMode {
                                physical_size: __field0,
                                bit_depth: __field1,
                                refresh_rate_millihertz: __field2,
                            })
                    }
                    #[inline]
                    fn visit_map<__A>(self, mut __map: __A)
                        -> _serde::__private229::Result<Self::Value, __A::Error>
                        where __A: _serde::de::MapAccess<'de> {
                        let mut __field0: _serde::__private229::Option<UVec2> =
                            _serde::__private229::None;
                        let mut __field1: _serde::__private229::Option<u16> =
                            _serde::__private229::None;
                        let mut __field2: _serde::__private229::Option<u32> =
                            _serde::__private229::None;
                        while let _serde::__private229::Some(__key) =
                                _serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
                            match __key {
                                __Field::__field0 => {
                                    if _serde::__private229::Option::is_some(&__field0) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("physical_size"));
                                    }
                                    __field0 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<UVec2>(&mut __map)?);
                                }
                                __Field::__field1 => {
                                    if _serde::__private229::Option::is_some(&__field1) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("bit_depth"));
                                    }
                                    __field1 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<u16>(&mut __map)?);
                                }
                                __Field::__field2 => {
                                    if _serde::__private229::Option::is_some(&__field2) {
                                        return _serde::__private229::Err(<__A::Error as
                                                        _serde::de::Error>::duplicate_field("refresh_rate_millihertz"));
                                    }
                                    __field2 =
                                        _serde::__private229::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
                                }
                                _ => {
                                    let _ =
                                        _serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
                                }
                            }
                        }
                        let __field0 =
                            match __field0 {
                                _serde::__private229::Some(__field0) => __field0,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("physical_size")?,
                            };
                        let __field1 =
                            match __field1 {
                                _serde::__private229::Some(__field1) => __field1,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("bit_depth")?,
                            };
                        let __field2 =
                            match __field2 {
                                _serde::__private229::Some(__field2) => __field2,
                                _serde::__private229::None =>
                                    _serde::__private229::de::missing_field("refresh_rate_millihertz")?,
                            };
                        _serde::__private229::Ok(VideoMode {
                                physical_size: __field0,
                                bit_depth: __field1,
                                refresh_rate_millihertz: __field2,
                            })
                    }
                }
                #[doc(hidden)]
                const FIELDS: &'static [&'static str] =
                    &["physical_size", "bit_depth", "refresh_rate_millihertz"];
                _serde::Deserializer::deserialize_struct(__deserializer,
                    "VideoMode", FIELDS,
                    __Visitor {
                        marker: _serde::__private229::PhantomData::<VideoMode>,
                        lifetime: _serde::__private229::PhantomData,
                    })
            }
        }
    };serde::Deserialize))]
74#[cfg_attr(
75    all(feature = "serialize", feature = "bevy_reflect"),
76    reflect(Serialize, Deserialize)
77)]
78pub struct VideoMode {
79    /// The resolution of the video mode
80    pub physical_size: UVec2,
81    /// The bit depth of the video mode
82    pub bit_depth: u16,
83    /// The refresh rate in millihertz
84    pub refresh_rate_millihertz: u32,
85}