1use bevy_ecs::{
8 component::{ComponentId, Components},
9 schedule::{
10 ApplyDeferred, ConditionWithAccess, InternedScheduleLabel, NodeId, Schedule,
11 ScheduleBuildMetadata, Schedules,
12 },
13 system::SystemStateFlags,
14};
15use bevy_platform::collections::{hash_map::Entry, HashMap};
16use serde::{Deserialize, Serialize};
17use thiserror::Error;
18
19#[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 AppData {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"AppData", false as usize + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"schedules", &self.schedules)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 AppData {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"schedules" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"schedules" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<AppData>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = AppData;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct AppData")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<Vec<ScheduleData>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct AppData with 1 element")),
};
_serde::__private228::Ok(AppData { schedules: __field0 })
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0:
_serde::__private228::Option<Vec<ScheduleData>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("schedules"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<ScheduleData>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("schedules")?,
};
_serde::__private228::Ok(AppData { schedules: __field0 })
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["schedules"];
_serde::Deserializer::deserialize_struct(__deserializer,
"AppData", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<AppData>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::fmt::Debug for AppData {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field1_finish(f, "AppData",
"schedules", &&self.schedules)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for AppData {
#[inline]
fn clone(&self) -> AppData {
AppData { schedules: ::core::clone::Clone::clone(&self.schedules) }
}
}Clone)]
21pub struct AppData {
22 pub schedules: Vec<ScheduleData>,
24}
25
26impl AppData {
27 pub fn from_schedules(
32 schedules: &Schedules,
33 world_components: &Components,
34 label_to_build_metadata: &HashMap<InternedScheduleLabel, ScheduleBuildMetadata>,
35 ) -> Result<Self, ExtractAppDataError> {
36 Ok(Self {
37 schedules: schedules
38 .iter()
39 .map(|(_, schedule)| {
40 ScheduleData::from_schedule(
41 schedule,
42 world_components,
43 label_to_build_metadata.get(&schedule.label()),
44 )
45 })
46 .collect::<Result<_, ExtractAppDataError>>()?,
47 })
48 }
49}
50
51#[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 ScheduleData {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ScheduleData",
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,
"systems", &self.systems)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"system_sets", &self.system_sets)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"hierarchy", &self.hierarchy)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"dependency", &self.dependency)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"components", &self.components)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"conflicts", &self.conflicts)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 ScheduleData {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::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::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
4u64 => _serde::__private228::Ok(__Field::__field4),
5u64 => _serde::__private228::Ok(__Field::__field5),
6u64 => _serde::__private228::Ok(__Field::__field6),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"name" => _serde::__private228::Ok(__Field::__field0),
"systems" => _serde::__private228::Ok(__Field::__field1),
"system_sets" =>
_serde::__private228::Ok(__Field::__field2),
"hierarchy" => _serde::__private228::Ok(__Field::__field3),
"dependency" => _serde::__private228::Ok(__Field::__field4),
"components" => _serde::__private228::Ok(__Field::__field5),
"conflicts" => _serde::__private228::Ok(__Field::__field6),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"name" => _serde::__private228::Ok(__Field::__field0),
b"systems" => _serde::__private228::Ok(__Field::__field1),
b"system_sets" =>
_serde::__private228::Ok(__Field::__field2),
b"hierarchy" => _serde::__private228::Ok(__Field::__field3),
b"dependency" =>
_serde::__private228::Ok(__Field::__field4),
b"components" =>
_serde::__private228::Ok(__Field::__field5),
b"conflicts" => _serde::__private228::Ok(__Field::__field6),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ScheduleData>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ScheduleData;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct ScheduleData")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct ScheduleData with 7 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Vec<SystemData>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct ScheduleData with 7 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<Vec<SystemSetData>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct ScheduleData with 7 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<Vec<(SystemSetIndex,
ScheduleIndex)>>(&mut __seq)? {
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct ScheduleData with 7 elements")),
};
let __field4 =
match _serde::de::SeqAccess::next_element::<Vec<(ScheduleIndex,
ScheduleIndex)>>(&mut __seq)? {
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(4usize,
&"struct ScheduleData with 7 elements")),
};
let __field5 =
match _serde::de::SeqAccess::next_element::<Vec<ComponentData>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(5usize,
&"struct ScheduleData with 7 elements")),
};
let __field6 =
match _serde::de::SeqAccess::next_element::<Vec<SystemConflict>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(6usize,
&"struct ScheduleData with 7 elements")),
};
_serde::__private228::Ok(ScheduleData {
name: __field0,
systems: __field1,
system_sets: __field2,
hierarchy: __field3,
dependency: __field4,
components: __field5,
conflicts: __field6,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Vec<SystemData>> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<Vec<SystemSetData>> =
_serde::__private228::None;
let mut __field3:
_serde::__private228::Option<Vec<(SystemSetIndex,
ScheduleIndex)>> = _serde::__private228::None;
let mut __field4:
_serde::__private228::Option<Vec<(ScheduleIndex,
ScheduleIndex)>> = _serde::__private228::None;
let mut __field5:
_serde::__private228::Option<Vec<ComponentData>> =
_serde::__private228::None;
let mut __field6:
_serde::__private228::Option<Vec<SystemConflict>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("systems"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<SystemData>>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("system_sets"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<SystemSetData>>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("hierarchy"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<(SystemSetIndex,
ScheduleIndex)>>(&mut __map)?);
}
__Field::__field4 => {
if _serde::__private228::Option::is_some(&__field4) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("dependency"));
}
__field4 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<(ScheduleIndex,
ScheduleIndex)>>(&mut __map)?);
}
__Field::__field5 => {
if _serde::__private228::Option::is_some(&__field5) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("components"));
}
__field5 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<ComponentData>>(&mut __map)?);
}
__Field::__field6 => {
if _serde::__private228::Option::is_some(&__field6) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("conflicts"));
}
__field6 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<SystemConflict>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("systems")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("system_sets")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("hierarchy")?,
};
let __field4 =
match __field4 {
_serde::__private228::Some(__field4) => __field4,
_serde::__private228::None =>
_serde::__private228::de::missing_field("dependency")?,
};
let __field5 =
match __field5 {
_serde::__private228::Some(__field5) => __field5,
_serde::__private228::None =>
_serde::__private228::de::missing_field("components")?,
};
let __field6 =
match __field6 {
_serde::__private228::Some(__field6) => __field6,
_serde::__private228::None =>
_serde::__private228::de::missing_field("conflicts")?,
};
_serde::__private228::Ok(ScheduleData {
name: __field0,
systems: __field1,
system_sets: __field2,
hierarchy: __field3,
dependency: __field4,
components: __field5,
conflicts: __field6,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["name", "systems", "system_sets", "hierarchy",
"dependency", "components", "conflicts"];
_serde::Deserializer::deserialize_struct(__deserializer,
"ScheduleData", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ScheduleData>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::fmt::Debug for ScheduleData {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
let names: &'static _ =
&["name", "systems", "system_sets", "hierarchy", "dependency",
"components", "conflicts"];
let values: &[&dyn ::core::fmt::Debug] =
&[&self.name, &self.systems, &self.system_sets, &self.hierarchy,
&self.dependency, &self.components, &&self.conflicts];
::core::fmt::Formatter::debug_struct_fields_finish(f, "ScheduleData",
names, values)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ScheduleData {
#[inline]
fn clone(&self) -> ScheduleData {
ScheduleData {
name: ::core::clone::Clone::clone(&self.name),
systems: ::core::clone::Clone::clone(&self.systems),
system_sets: ::core::clone::Clone::clone(&self.system_sets),
hierarchy: ::core::clone::Clone::clone(&self.hierarchy),
dependency: ::core::clone::Clone::clone(&self.dependency),
components: ::core::clone::Clone::clone(&self.components),
conflicts: ::core::clone::Clone::clone(&self.conflicts),
}
}
}Clone)]
53pub struct ScheduleData {
54 pub name: String,
56 pub systems: Vec<SystemData>,
58 pub system_sets: Vec<SystemSetData>,
60 pub hierarchy: Vec<(SystemSetIndex, ScheduleIndex)>,
64 pub dependency: Vec<(ScheduleIndex, ScheduleIndex)>,
68 pub components: Vec<ComponentData>,
70 pub conflicts: Vec<SystemConflict>,
72}
73
74#[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 ComponentData {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ComponentData", false as usize + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 ComponentData {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"name" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"name" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ComponentData>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ComponentData;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct ComponentData")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct ComponentData with 1 element")),
};
_serde::__private228::Ok(ComponentData { name: __field0 })
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<String> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
_serde::__private228::Ok(ComponentData { name: __field0 })
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["name"];
_serde::Deserializer::deserialize_struct(__deserializer,
"ComponentData", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ComponentData>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for ComponentData {
#[inline]
fn eq(&self, other: &ComponentData) -> bool { self.name == other.name }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ComponentData {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<String>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for ComponentData {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field1_finish(f, "ComponentData",
"name", &&self.name)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ComponentData {
#[inline]
fn clone(&self) -> ComponentData {
ComponentData { name: ::core::clone::Clone::clone(&self.name) }
}
}Clone)]
76pub struct ComponentData {
77 pub name: String,
79}
80
81#[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 SystemData {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"SystemData", false as usize + 1 + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"apply_deferred", &self.apply_deferred)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"exclusive", &self.exclusive)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"deferred", &self.deferred)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 SystemData {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field {
__field0,
__field1,
__field2,
__field3,
__ignore,
}
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
3u64 => _serde::__private228::Ok(__Field::__field3),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"name" => _serde::__private228::Ok(__Field::__field0),
"apply_deferred" =>
_serde::__private228::Ok(__Field::__field1),
"exclusive" => _serde::__private228::Ok(__Field::__field2),
"deferred" => _serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"name" => _serde::__private228::Ok(__Field::__field0),
b"apply_deferred" =>
_serde::__private228::Ok(__Field::__field1),
b"exclusive" => _serde::__private228::Ok(__Field::__field2),
b"deferred" => _serde::__private228::Ok(__Field::__field3),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<SystemData>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = SystemData;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct SystemData")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct SystemData with 4 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct SystemData with 4 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct SystemData with 4 elements")),
};
let __field3 =
match _serde::de::SeqAccess::next_element::<bool>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(3usize,
&"struct SystemData with 4 elements")),
};
_serde::__private228::Ok(SystemData {
name: __field0,
apply_deferred: __field1,
exclusive: __field2,
deferred: __field3,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<bool> =
_serde::__private228::None;
let mut __field2: _serde::__private228::Option<bool> =
_serde::__private228::None;
let mut __field3: _serde::__private228::Option<bool> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("apply_deferred"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("exclusive"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
__Field::__field3 => {
if _serde::__private228::Option::is_some(&__field3) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("deferred"));
}
__field3 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<bool>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("apply_deferred")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("exclusive")?,
};
let __field3 =
match __field3 {
_serde::__private228::Some(__field3) => __field3,
_serde::__private228::None =>
_serde::__private228::de::missing_field("deferred")?,
};
_serde::__private228::Ok(SystemData {
name: __field0,
apply_deferred: __field1,
exclusive: __field2,
deferred: __field3,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["name", "apply_deferred", "exclusive", "deferred"];
_serde::Deserializer::deserialize_struct(__deserializer,
"SystemData", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<SystemData>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for SystemData {
#[inline]
fn eq(&self, other: &SystemData) -> bool {
self.apply_deferred == other.apply_deferred &&
self.exclusive == other.exclusive &&
self.deferred == other.deferred && self.name == other.name
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for SystemData {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<String>;
let _: ::core::cmp::AssertParamIsEq<bool>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for SystemData {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field4_finish(f, "SystemData",
"name", &self.name, "apply_deferred", &self.apply_deferred,
"exclusive", &self.exclusive, "deferred", &&self.deferred)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for SystemData {
#[inline]
fn clone(&self) -> SystemData {
SystemData {
name: ::core::clone::Clone::clone(&self.name),
apply_deferred: ::core::clone::Clone::clone(&self.apply_deferred),
exclusive: ::core::clone::Clone::clone(&self.exclusive),
deferred: ::core::clone::Clone::clone(&self.deferred),
}
}
}Clone)]
83pub struct SystemData {
84 pub name: String,
86 pub apply_deferred: bool,
88 pub exclusive: bool,
90 pub deferred: bool,
92 }
94
95#[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 SystemSetData {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"SystemSetData", false as usize + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"conditions", &self.conditions)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 SystemSetData {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"name" => _serde::__private228::Ok(__Field::__field0),
"conditions" => _serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"name" => _serde::__private228::Ok(__Field::__field0),
b"conditions" =>
_serde::__private228::Ok(__Field::__field1),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<SystemSetData>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = SystemSetData;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct SystemSetData")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct SystemSetData with 2 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<Vec<ConditionData>>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct SystemSetData with 2 elements")),
};
_serde::__private228::Ok(SystemSetData {
name: __field0,
conditions: __field1,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<String> =
_serde::__private228::None;
let mut __field1:
_serde::__private228::Option<Vec<ConditionData>> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("conditions"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<Vec<ConditionData>>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("conditions")?,
};
_serde::__private228::Ok(SystemSetData {
name: __field0,
conditions: __field1,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["name", "conditions"];
_serde::Deserializer::deserialize_struct(__deserializer,
"SystemSetData", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<SystemSetData>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for SystemSetData {
#[inline]
fn eq(&self, other: &SystemSetData) -> bool {
self.name == other.name && self.conditions == other.conditions
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for SystemSetData {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<String>;
let _: ::core::cmp::AssertParamIsEq<Vec<ConditionData>>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for SystemSetData {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field2_finish(f, "SystemSetData",
"name", &self.name, "conditions", &&self.conditions)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for SystemSetData {
#[inline]
fn clone(&self) -> SystemSetData {
SystemSetData {
name: ::core::clone::Clone::clone(&self.name),
conditions: ::core::clone::Clone::clone(&self.conditions),
}
}
}Clone)]
97pub struct SystemSetData {
98 pub name: String,
100 pub conditions: Vec<ConditionData>,
102}
103
104#[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 ConditionData {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"ConditionData", false as usize + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"name", &self.name)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 ConditionData {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __ignore, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"name" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"name" => _serde::__private228::Ok(__Field::__field0),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ConditionData>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ConditionData;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct ConditionData")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<String>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct ConditionData with 1 element")),
};
_serde::__private228::Ok(ConditionData { name: __field0 })
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<String> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("name"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<String>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("name")?,
};
_serde::__private228::Ok(ConditionData { name: __field0 })
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] = &["name"];
_serde::Deserializer::deserialize_struct(__deserializer,
"ConditionData", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<ConditionData>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for ConditionData {
#[inline]
fn eq(&self, other: &ConditionData) -> bool { self.name == other.name }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ConditionData {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<String>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for ConditionData {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field1_finish(f, "ConditionData",
"name", &&self.name)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for ConditionData {
#[inline]
fn clone(&self) -> ConditionData {
ConditionData { name: ::core::clone::Clone::clone(&self.name) }
}
}Clone)]
106pub struct ConditionData {
107 pub name: String,
109}
110
111#[derive(#[automatically_derived]
impl ::core::clone::Clone for ScheduleIndex {
#[inline]
fn clone(&self) -> ScheduleIndex {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for ScheduleIndex { }Copy, #[automatically_derived]
impl ::core::fmt::Debug for ScheduleIndex {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
ScheduleIndex::System(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f, "System",
&__self_0),
ScheduleIndex::SystemSet(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"SystemSet", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::hash::Hash for ScheduleIndex {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
let __self_discr = ::core::intrinsics::discriminant_value(self);
::core::hash::Hash::hash(&__self_discr, state);
match self {
ScheduleIndex::System(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
ScheduleIndex::SystemSet(__self_0) =>
::core::hash::Hash::hash(__self_0, state),
}
}
}Hash, #[automatically_derived]
impl ::core::cmp::PartialEq for ScheduleIndex {
#[inline]
fn eq(&self, other: &ScheduleIndex) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(ScheduleIndex::System(__self_0),
ScheduleIndex::System(__arg1_0)) => __self_0 == __arg1_0,
(ScheduleIndex::SystemSet(__self_0),
ScheduleIndex::SystemSet(__arg1_0)) => __self_0 == __arg1_0,
_ => unsafe { ::core::intrinsics::unreachable() }
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for ScheduleIndex {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
}
}Eq, #[automatically_derived]
impl ::core::cmp::PartialOrd for ScheduleIndex {
#[inline]
fn partial_cmp(&self, other: &ScheduleIndex)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for ScheduleIndex {
#[inline]
fn cmp(&self, other: &ScheduleIndex) -> ::core::cmp::Ordering {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
match ::core::cmp::Ord::cmp(&__self_discr, &__arg1_discr) {
::core::cmp::Ordering::Equal =>
match (self, other) {
(ScheduleIndex::System(__self_0),
ScheduleIndex::System(__arg1_0)) =>
::core::cmp::Ord::cmp(__self_0, __arg1_0),
(ScheduleIndex::SystemSet(__self_0),
ScheduleIndex::SystemSet(__arg1_0)) =>
::core::cmp::Ord::cmp(__self_0, __arg1_0),
_ => unsafe { ::core::intrinsics::unreachable() }
},
cmp => cmp,
}
}
}Ord, #[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 ScheduleIndex {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
ScheduleIndex::System(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"ScheduleIndex", 0u32, "System", __field0),
ScheduleIndex::SystemSet(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"ScheduleIndex", 1u32, "SystemSet", __field0),
}
}
}
};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 ScheduleIndex {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 2")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"System" => _serde::__private228::Ok(__Field::__field0),
"SystemSet" => _serde::__private228::Ok(__Field::__field1),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"System" => _serde::__private228::Ok(__Field::__field0),
b"SystemSet" => _serde::__private228::Ok(__Field::__field1),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<ScheduleIndex>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = ScheduleIndex;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum ScheduleIndex")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<u32>(__variant),
ScheduleIndex::System),
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<u32>(__variant),
ScheduleIndex::SystemSet),
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["System", "SystemSet"];
_serde::Deserializer::deserialize_enum(__deserializer,
"ScheduleIndex", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<ScheduleIndex>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize)]
113pub enum ScheduleIndex {
114 System(u32),
116 SystemSet(u32),
118}
119
120#[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 SystemConflict {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
let mut __serde_state =
_serde::Serializer::serialize_struct(__serializer,
"SystemConflict", false as usize + 1 + 1 + 1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"system_1", &self.system_1)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"system_2", &self.system_2)?;
_serde::ser::SerializeStruct::serialize_field(&mut __serde_state,
"conflicting_access", &self.conflicting_access)?;
_serde::ser::SerializeStruct::end(__serde_state)
}
}
};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 SystemConflict {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::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::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"field identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
2u64 => _serde::__private228::Ok(__Field::__field2),
_ => _serde::__private228::Ok(__Field::__ignore),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"system_1" => _serde::__private228::Ok(__Field::__field0),
"system_2" => _serde::__private228::Ok(__Field::__field1),
"conflicting_access" =>
_serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"system_1" => _serde::__private228::Ok(__Field::__field0),
b"system_2" => _serde::__private228::Ok(__Field::__field1),
b"conflicting_access" =>
_serde::__private228::Ok(__Field::__field2),
_ => { _serde::__private228::Ok(__Field::__ignore) }
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<SystemConflict>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = SystemConflict;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"struct SystemConflict")
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"struct SystemConflict with 3 elements")),
};
let __field1 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(1usize,
&"struct SystemConflict with 3 elements")),
};
let __field2 =
match _serde::de::SeqAccess::next_element::<AccessConflict>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(2usize,
&"struct SystemConflict with 3 elements")),
};
_serde::__private228::Ok(SystemConflict {
system_1: __field0,
system_2: __field1,
conflicting_access: __field2,
})
}
#[inline]
fn visit_map<__A>(self, mut __map: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::MapAccess<'de> {
let mut __field0: _serde::__private228::Option<u32> =
_serde::__private228::None;
let mut __field1: _serde::__private228::Option<u32> =
_serde::__private228::None;
let mut __field2:
_serde::__private228::Option<AccessConflict> =
_serde::__private228::None;
while let _serde::__private228::Some(__key) =
_serde::de::MapAccess::next_key::<__Field>(&mut __map)? {
match __key {
__Field::__field0 => {
if _serde::__private228::Option::is_some(&__field0) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("system_1"));
}
__field0 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
__Field::__field1 => {
if _serde::__private228::Option::is_some(&__field1) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("system_2"));
}
__field1 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<u32>(&mut __map)?);
}
__Field::__field2 => {
if _serde::__private228::Option::is_some(&__field2) {
return _serde::__private228::Err(<__A::Error as
_serde::de::Error>::duplicate_field("conflicting_access"));
}
__field2 =
_serde::__private228::Some(_serde::de::MapAccess::next_value::<AccessConflict>(&mut __map)?);
}
_ => {
let _ =
_serde::de::MapAccess::next_value::<_serde::de::IgnoredAny>(&mut __map)?;
}
}
}
let __field0 =
match __field0 {
_serde::__private228::Some(__field0) => __field0,
_serde::__private228::None =>
_serde::__private228::de::missing_field("system_1")?,
};
let __field1 =
match __field1 {
_serde::__private228::Some(__field1) => __field1,
_serde::__private228::None =>
_serde::__private228::de::missing_field("system_2")?,
};
let __field2 =
match __field2 {
_serde::__private228::Some(__field2) => __field2,
_serde::__private228::None =>
_serde::__private228::de::missing_field("conflicting_access")?,
};
_serde::__private228::Ok(SystemConflict {
system_1: __field0,
system_2: __field1,
conflicting_access: __field2,
})
}
}
#[doc(hidden)]
const FIELDS: &'static [&'static str] =
&["system_1", "system_2", "conflicting_access"];
_serde::Deserializer::deserialize_struct(__deserializer,
"SystemConflict", FIELDS,
__Visitor {
marker: _serde::__private228::PhantomData::<SystemConflict>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for SystemConflict {
#[inline]
fn eq(&self, other: &SystemConflict) -> bool {
self.system_1 == other.system_1 && self.system_2 == other.system_2 &&
self.conflicting_access == other.conflicting_access
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for SystemConflict {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
let _: ::core::cmp::AssertParamIsEq<AccessConflict>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for SystemConflict {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"SystemConflict", "system_1", &self.system_1, "system_2",
&self.system_2, "conflicting_access", &&self.conflicting_access)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for SystemConflict {
#[inline]
fn clone(&self) -> SystemConflict {
SystemConflict {
system_1: ::core::clone::Clone::clone(&self.system_1),
system_2: ::core::clone::Clone::clone(&self.system_2),
conflicting_access: ::core::clone::Clone::clone(&self.conflicting_access),
}
}
}Clone)]
122pub struct SystemConflict {
123 pub system_1: u32,
125 pub system_2: u32,
127 pub conflicting_access: AccessConflict,
129}
130
131#[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 AccessConflict {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
match *self {
AccessConflict::World =>
_serde::Serializer::serialize_unit_variant(__serializer,
"AccessConflict", 0u32, "World"),
AccessConflict::Components(ref __field0) =>
_serde::Serializer::serialize_newtype_variant(__serializer,
"AccessConflict", 1u32, "Components", __field0),
}
}
}
};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 AccessConflict {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[allow(non_camel_case_types)]
#[doc(hidden)]
enum __Field { __field0, __field1, }
#[doc(hidden)]
struct __FieldVisitor;
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"variant identifier")
}
fn visit_u64<__E>(self, __value: u64)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
0u64 => _serde::__private228::Ok(__Field::__field0),
1u64 => _serde::__private228::Ok(__Field::__field1),
_ =>
_serde::__private228::Err(_serde::de::Error::invalid_value(_serde::de::Unexpected::Unsigned(__value),
&"variant index 0 <= i < 2")),
}
}
fn visit_str<__E>(self, __value: &str)
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
"World" => _serde::__private228::Ok(__Field::__field0),
"Components" => _serde::__private228::Ok(__Field::__field1),
_ => {
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
fn visit_bytes<__E>(self, __value: &[u8])
-> _serde::__private228::Result<Self::Value, __E> where
__E: _serde::de::Error {
match __value {
b"World" => _serde::__private228::Ok(__Field::__field0),
b"Components" =>
_serde::__private228::Ok(__Field::__field1),
_ => {
let __value =
&_serde::__private228::from_utf8_lossy(__value);
_serde::__private228::Err(_serde::de::Error::unknown_variant(__value,
VARIANTS))
}
}
}
}
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
_serde::Deserializer::deserialize_identifier(__deserializer,
__FieldVisitor)
}
}
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<AccessConflict>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = AccessConflict;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"enum AccessConflict")
}
fn visit_enum<__A>(self, __data: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::EnumAccess<'de> {
match _serde::de::EnumAccess::variant(__data)? {
(__Field::__field0, __variant) => {
_serde::de::VariantAccess::unit_variant(__variant)?;
_serde::__private228::Ok(AccessConflict::World)
}
(__Field::__field1, __variant) =>
_serde::__private228::Result::map(_serde::de::VariantAccess::newtype_variant::<Vec<u32>>(__variant),
AccessConflict::Components),
}
}
}
#[doc(hidden)]
const VARIANTS: &'static [&'static str] =
&["World", "Components"];
_serde::Deserializer::deserialize_enum(__deserializer,
"AccessConflict", VARIANTS,
__Visitor {
marker: _serde::__private228::PhantomData::<AccessConflict>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for AccessConflict {
#[inline]
fn eq(&self, other: &AccessConflict) -> bool {
let __self_discr = ::core::intrinsics::discriminant_value(self);
let __arg1_discr = ::core::intrinsics::discriminant_value(other);
__self_discr == __arg1_discr &&
match (self, other) {
(AccessConflict::Components(__self_0),
AccessConflict::Components(__arg1_0)) =>
__self_0 == __arg1_0,
_ => true,
}
}
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for AccessConflict {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<Vec<u32>>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for AccessConflict {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
AccessConflict::World =>
::core::fmt::Formatter::write_str(f, "World"),
AccessConflict::Components(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"Components", &__self_0),
}
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for AccessConflict {
#[inline]
fn clone(&self) -> AccessConflict {
match self {
AccessConflict::World => AccessConflict::World,
AccessConflict::Components(__self_0) =>
AccessConflict::Components(::core::clone::Clone::clone(__self_0)),
}
}
}Clone)]
133pub enum AccessConflict {
134 World,
137 Components(Vec<u32>),
139}
140
141#[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 SystemSetIndex {
fn serialize<__S>(&self, __serializer: __S)
-> _serde::__private228::Result<__S::Ok, __S::Error> where
__S: _serde::Serializer {
_serde::Serializer::serialize_newtype_struct(__serializer,
"SystemSetIndex", &self.0)
}
}
};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 SystemSetIndex {
fn deserialize<__D>(__deserializer: __D)
-> _serde::__private228::Result<Self, __D::Error> where
__D: _serde::Deserializer<'de> {
#[doc(hidden)]
struct __Visitor<'de> {
marker: _serde::__private228::PhantomData<SystemSetIndex>,
lifetime: _serde::__private228::PhantomData<&'de ()>,
}
#[automatically_derived]
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = SystemSetIndex;
fn expecting(&self,
__formatter: &mut _serde::__private228::Formatter)
-> _serde::__private228::fmt::Result {
_serde::__private228::Formatter::write_str(__formatter,
"tuple struct SystemSetIndex")
}
#[inline]
fn visit_newtype_struct<__E>(self, __e: __E)
-> _serde::__private228::Result<Self::Value, __E::Error>
where __E: _serde::Deserializer<'de> {
let __field0: u32 =
<u32 as _serde::Deserialize>::deserialize(__e)?;
_serde::__private228::Ok(SystemSetIndex(__field0))
}
#[inline]
fn visit_seq<__A>(self, mut __seq: __A)
-> _serde::__private228::Result<Self::Value, __A::Error>
where __A: _serde::de::SeqAccess<'de> {
let __field0 =
match _serde::de::SeqAccess::next_element::<u32>(&mut __seq)?
{
_serde::__private228::Some(__value) => __value,
_serde::__private228::None =>
return _serde::__private228::Err(_serde::de::Error::invalid_length(0usize,
&"tuple struct SystemSetIndex with 1 element")),
};
_serde::__private228::Ok(SystemSetIndex(__field0))
}
}
_serde::Deserializer::deserialize_newtype_struct(__deserializer,
"SystemSetIndex",
__Visitor {
marker: _serde::__private228::PhantomData::<SystemSetIndex>,
lifetime: _serde::__private228::PhantomData,
})
}
}
};Deserialize, #[automatically_derived]
impl ::core::cmp::PartialEq for SystemSetIndex {
#[inline]
fn eq(&self, other: &SystemSetIndex) -> bool { self.0 == other.0 }
}PartialEq, #[automatically_derived]
impl ::core::cmp::Eq for SystemSetIndex {
#[inline]
#[doc(hidden)]
#[coverage(off)]
fn assert_fields_are_eq(&self) {
let _: ::core::cmp::AssertParamIsEq<u32>;
}
}Eq, #[automatically_derived]
impl ::core::fmt::Debug for SystemSetIndex {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_tuple_field1_finish(f, "SystemSetIndex",
&&self.0)
}
}Debug, #[automatically_derived]
impl ::core::clone::Clone for SystemSetIndex {
#[inline]
fn clone(&self) -> SystemSetIndex {
let _: ::core::clone::AssertParamIsClone<u32>;
*self
}
}Clone, #[automatically_derived]
impl ::core::marker::Copy for SystemSetIndex { }Copy, #[automatically_derived]
impl ::core::cmp::PartialOrd for SystemSetIndex {
#[inline]
fn partial_cmp(&self, other: &SystemSetIndex)
-> ::core::option::Option<::core::cmp::Ordering> {
::core::option::Option::Some(::core::cmp::Ord::cmp(self, other))
}
}PartialOrd, #[automatically_derived]
impl ::core::cmp::Ord for SystemSetIndex {
#[inline]
fn cmp(&self, other: &SystemSetIndex) -> ::core::cmp::Ordering {
::core::cmp::Ord::cmp(&self.0, &other.0)
}
}Ord)]
146pub struct SystemSetIndex(pub u32);
147
148impl ScheduleData {
149 pub fn from_schedule(
153 schedule: &Schedule,
154 world_components: &Components,
155 build_metadata: Option<&ScheduleBuildMetadata>,
156 ) -> Result<Self, ExtractAppDataError> {
157 let graph = schedule.graph();
158
159 let mut system_key_to_index = HashMap::new();
160 let mut system_set_key_to_index = HashMap::new();
161
162 fn extract_condition_data(conditions: &[ConditionWithAccess]) -> Vec<ConditionData> {
163 conditions
164 .iter()
165 .map(|condition| ConditionData {
166 name: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", condition.condition.name()))
})format!("{}", condition.condition.name()),
167 })
168 .collect()
169 }
170
171 let systems = schedule
172 .systems()
173 .map_err(|_| {
174 ExtractAppDataError::ScheduleNotInitialized(::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0:?}", schedule.label()))
})format!("{:?}", schedule.label()))
175 })?
176 .enumerate()
177 .map(|(index, (key, system))| {
178 system_key_to_index.insert(key, index);
179
180 let flags = system.flags();
181
182 SystemData {
183 name: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", system.name()))
})format!("{}", system.name()),
184 apply_deferred: system.system_type()
185 == core::any::TypeId::of::<ApplyDeferred>(),
186 exclusive: flags.contains(SystemStateFlags::EXCLUSIVE),
187 deferred: flags.contains(SystemStateFlags::DEFERRED),
188 }
189 })
190 .collect();
191
192 let system_sets = graph
193 .system_sets
194 .iter()
195 .enumerate()
196 .map(|(index, (key, system_set, conditions))| {
197 system_set_key_to_index.insert(key, index);
198
199 SystemSetData {
200 name: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0:?}", system_set))
})format!("{:?}", system_set),
201 conditions: extract_condition_data(conditions),
202 }
203 })
204 .collect();
205
206 let node_id_to_schedule_index = |node_id: NodeId| match node_id {
207 NodeId::System(key) => ScheduleIndex::System(
208 *system_key_to_index
209 .get(&key)
210 .expect("the system this key refers to should have already been seen")
211 as _,
212 ),
213 NodeId::Set(key) => ScheduleIndex::SystemSet(
214 *system_set_key_to_index
215 .get(&key)
216 .expect("the system set this key refers to should have already been seen")
217 as _,
218 ),
219 };
220
221 let hierarchy = graph
222 .hierarchy()
223 .graph()
224 .all_edges()
225 .map(|(parent, child)| {
226 let parent = system_set_key_to_index
227 .get(
228 &parent
229 .as_set()
230 .expect("the parent of a system/set is always a set"),
231 )
232 .expect("the system set this key refers to should have already been seen");
233 let child = node_id_to_schedule_index(child);
234
235 (SystemSetIndex(*parent as _), child)
236 })
237 .collect();
238
239 let mut dependency = graph
240 .dependency()
241 .graph()
242 .all_edges()
243 .map(|(a, b)| (node_id_to_schedule_index(a), node_id_to_schedule_index(b)))
244 .collect::<Vec<_>>();
245
246 if let Some(build_metadata) = build_metadata {
247 dependency.extend(
249 build_metadata
250 .edges_added_by_build_passes
251 .iter()
252 .map(|(a, b)| {
253 (
254 node_id_to_schedule_index(NodeId::System(*a)),
255 node_id_to_schedule_index(NodeId::System(*b)),
256 )
257 }),
258 );
259 }
260
261 let mut component_id_to_index = HashMap::<ComponentId, usize>::new();
262 let mut components = ::alloc::vec::Vec::new()vec![];
263
264 let conflicts = graph
265 .conflicting_systems()
266 .iter()
267 .map(|(system_1, system_2, conflicts)| {
268 let system_1 = system_key_to_index
269 .get(system_1)
270 .expect("the system this key refers to should have already been seen");
271 let system_2 = system_key_to_index
272 .get(system_2)
273 .expect("the system this key refers to should have already been seen");
274
275 SystemConflict {
276 system_1: *system_1 as _,
277 system_2: *system_2 as _,
278 conflicting_access: if conflicts.is_empty() {
279 AccessConflict::World
281 } else {
282 AccessConflict::Components(
283 conflicts
284 .iter()
285 .map(|id| match component_id_to_index.entry(*id) {
286 Entry::Occupied(entry) => *entry.get() as _,
287 Entry::Vacant(entry) => {
288 let component = world_components.get_info(*id).expect(
289 "the component has already been registered by the system",
290 );
291
292 components.push(ComponentData {
293 name: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0}", component.name()))
})format!("{}", component.name()),
294 });
295 *entry.insert(components.len() - 1) as _
296 }
297 })
298 .collect(),
299 )
300 },
301 }
302 })
303 .collect();
304
305 Ok(Self {
306 name: ::alloc::__export::must_use({
::alloc::fmt::format(format_args!("{0:?}", schedule.label()))
})format!("{:?}", schedule.label()),
307 components,
308 systems,
309 system_sets,
310 hierarchy,
311 dependency,
312 conflicts,
313 })
314 }
315}
316
317#[derive(#[allow(unused_qualifications)]
#[automatically_derived]
impl ::core::fmt::Display for ExtractAppDataError {
fn fmt(&self, __formatter: &mut ::core::fmt::Formatter)
-> ::core::fmt::Result {
use ::thiserror::__private18::AsDisplay as _;
#[allow(unused_variables, deprecated, clippy ::
used_underscore_binding)]
match self {
ExtractAppDataError::ScheduleNotInitialized(_0) =>
match (_0.as_display(),) {
(__display0,) =>
__formatter.write_fmt(format_args!("executable schedule has not been created for label \"{0}\"",
__display0)),
},
}
}
}Error, #[automatically_derived]
impl ::core::fmt::Debug for ExtractAppDataError {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
match self {
ExtractAppDataError::ScheduleNotInitialized(__self_0) =>
::core::fmt::Formatter::debug_tuple_field1_finish(f,
"ScheduleNotInitialized", &__self_0),
}
}
}Debug)]
319pub enum ExtractAppDataError {
320 #[error("executable schedule has not been created for label \"{0}\"")]
322 ScheduleNotInitialized(String),
323}
324
325#[cfg(test)]
326pub mod tests {
330 use bevy_app::{App, Update};
331 use bevy_ecs::{
332 component::Component,
333 query::{With, Without},
334 schedule::{IntoScheduleConfigs, Schedules, SystemSet},
335 system::{Commands, Query},
336 };
337 use bevy_platform::collections::HashMap;
338
339 use crate::schedule_data::serde::{
340 AccessConflict, AppData, ComponentData, ExtractAppDataError, ScheduleData, ScheduleIndex,
341 SystemConflict, SystemData, SystemSetData, SystemSetIndex,
342 };
343
344 fn app_data_from_app(app: &mut App) -> Result<AppData, ExtractAppDataError> {
345 let schedules = app.world_mut().resource::<Schedules>();
346 let interned_labels = schedules
350 .iter()
351 .map(|(_, schedule)| schedule.label())
352 .collect::<Vec<_>>();
353
354 let mut label_to_build_metadata = HashMap::new();
355
356 for label in interned_labels {
357 let build_metadata = app
358 .world_mut()
359 .schedule_scope(label, |world, schedule| schedule.initialize(world))
360 .unwrap()
361 .unwrap();
362 label_to_build_metadata.insert(label, build_metadata);
363 }
364
365 let mut app_data = AppData::from_schedules(
366 app.world().resource::<Schedules>(),
367 app.world().components(),
368 &label_to_build_metadata,
369 )?;
370
371 remove_module_paths(&mut app_data);
372 sort_app_data(&mut app_data);
373 Ok(app_data)
374 }
375
376 pub fn remove_module_paths(app_data: &mut AppData) {
379 for schedule in app_data.schedules.iter_mut() {
380 for system in schedule.systems.iter_mut() {
381 system.name = system.name.rsplit_once(":").unwrap().1.to_string();
382 }
383 for set in schedule.system_sets.iter_mut() {
384 let name_modless = set
385 .name
386 .rsplit_once(":")
387 .map(|(_, suffix)| suffix)
388 .unwrap_or(set.name.as_str())
389 .to_string();
390 if set.name.starts_with("SystemTypeSet") {
391 set.name = format!("SystemTypeSet:{name_modless}");
394 } else {
395 set.name = name_modless;
396 }
397 }
398 for component in schedule.components.iter_mut() {
399 component.name = component.name.rsplit_once(":").unwrap().1.to_string();
400 }
401 }
402 }
403
404 pub fn sort_app_data(app_data: &mut AppData) {
409 app_data
411 .schedules
412 .sort_by_key(|schedule| schedule.name.clone());
413 app_data.schedules.iter_mut().for_each(sort_schedule);
415
416 fn sort_schedule(schedule: &mut ScheduleData) {
419 fn reorder_slice<T, K: Ord>(
422 slice: &mut [T],
423 key_fn: impl Fn(&T) -> K,
424 ) -> HashMap<usize, usize> {
425 let mut mapping = (0..slice.len()).collect::<Vec<_>>();
426 mapping.sort_by_key(|index| key_fn(&slice[*index]));
429 slice.sort_by_key(key_fn);
430
431 mapping
432 .into_iter()
433 .enumerate()
435 .map(|(new, old)| (old, new))
437 .collect()
438 }
439
440 let system_old_index_to_new_index =
441 reorder_slice(&mut schedule.systems, |system| system.name.clone());
442 let system_set_old_index_to_new_index =
443 reorder_slice(&mut schedule.system_sets, |set| set.name.clone());
444 let component_old_index_to_new_index =
445 reorder_slice(&mut schedule.components, |component| component.name.clone());
446
447 let reindex_system = |index: &mut u32| {
448 *index = *system_old_index_to_new_index
449 .get(&(*index as usize))
450 .unwrap() as u32;
451 };
452 let reindex_system_set = |index: &mut u32| {
453 *index = *system_set_old_index_to_new_index
454 .get(&(*index as usize))
455 .unwrap() as u32;
456 };
457 let reindex_schedule_index = |index: &mut ScheduleIndex| match index {
458 ScheduleIndex::System(system) => reindex_system(system),
459 ScheduleIndex::SystemSet(set) => reindex_system_set(set),
460 };
461
462 let reindex_component = |index: &mut u32| {
463 *index = *component_old_index_to_new_index
464 .get(&(*index as usize))
465 .unwrap() as u32;
466 };
467
468 for set in schedule.system_sets.iter_mut() {
470 set.conditions
471 .sort_by_key(|condition| condition.name.clone());
472 }
473
474 for (parent, child) in schedule.hierarchy.iter_mut() {
476 reindex_system_set(&mut parent.0);
477 reindex_schedule_index(child);
478 }
479 schedule.hierarchy.sort();
480
481 for (parent, child) in schedule.dependency.iter_mut() {
483 reindex_schedule_index(parent);
484 reindex_schedule_index(child);
485 }
486 schedule.dependency.sort();
487
488 for conflict in schedule.conflicts.iter_mut() {
490 reindex_system(&mut conflict.system_1);
491 reindex_system(&mut conflict.system_2);
492
493 if conflict.system_1 > conflict.system_2 {
496 core::mem::swap(&mut conflict.system_1, &mut conflict.system_2);
497 }
498
499 match &mut conflict.conflicting_access {
500 AccessConflict::World => {}
501 AccessConflict::Components(components) => {
502 components.iter_mut().for_each(reindex_component);
503 components.sort();
504 }
505 };
506 }
507 schedule
508 .conflicts
509 .sort_by_key(|conflict| (conflict.system_1, conflict.system_2));
510 }
511 }
512
513 pub fn simple_system(name: &str) -> SystemData {
515 SystemData {
516 name: name.into(),
517 apply_deferred: false,
518 exclusive: false,
519 deferred: false,
520 }
521 }
522
523 pub fn simple_system_set(name: &str) -> SystemSetData {
525 SystemSetData {
526 name: name.into(),
527 conditions: vec![],
528 }
529 }
530
531 pub fn simple_component(name: &str) -> ComponentData {
533 ComponentData { name: name.into() }
534 }
535
536 pub fn conflict(
538 system_1: u32,
539 system_2: u32,
540 conflicting_access: AccessConflict,
541 ) -> SystemConflict {
542 SystemConflict {
543 system_1,
544 system_2,
545 conflicting_access,
546 }
547 }
548
549 #[derive(SystemSet, Hash, PartialEq, Eq, Clone)]
551 struct MySet<const NUM: u32>;
552
553 impl<const NUM: u32> core::fmt::Debug for MySet<NUM> {
554 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
555 write!(f, "MySet<{NUM}>")
556 }
557 }
558
559 #[derive(Component)]
561 struct MyComponent<const NUM: u32>;
562
563 #[test]
564 fn linear() {
565 let mut app = App::empty();
566
567 fn a() {}
568 fn b() {}
569 fn c() {}
570
571 app.add_systems(Update, (a, b, c).chain());
572
573 let data = app_data_from_app(&mut app).unwrap();
574 assert_eq!(data.schedules.len(), 1);
575 let schedule = &data.schedules[0];
576 assert_eq!(schedule.name, "Update");
577 assert_eq!(
578 schedule.systems,
579 [simple_system("a"), simple_system("b"), simple_system("c"),]
580 );
581 assert_eq!(
583 schedule.system_sets,
584 [
585 simple_system_set("SystemTypeSet:a"),
586 simple_system_set("SystemTypeSet:b"),
587 simple_system_set("SystemTypeSet:c"),
588 ]
589 );
590 assert_eq!(
592 schedule.hierarchy,
593 [
594 (SystemSetIndex(0), ScheduleIndex::System(0)),
595 (SystemSetIndex(1), ScheduleIndex::System(1)),
596 (SystemSetIndex(2), ScheduleIndex::System(2)),
597 ]
598 );
599 assert_eq!(
601 schedule.dependency,
602 [
603 (ScheduleIndex::System(0), ScheduleIndex::System(1)),
604 (ScheduleIndex::System(1), ScheduleIndex::System(2)),
605 ]
606 );
607 assert_eq!(schedule.components.len(), 0);
608 assert_eq!(schedule.conflicts.len(), 0);
609 }
610
611 #[test]
612 fn linear_with_system_sets() {
613 let mut app = App::empty();
614
615 app.configure_sets(Update, (MySet::<0>, MySet::<1>, MySet::<2>).chain());
616
617 let data = app_data_from_app(&mut app).unwrap();
618 assert_eq!(data.schedules.len(), 1);
619 let schedule = &data.schedules[0];
620 assert_eq!(schedule.name, "Update");
621 assert_eq!(schedule.systems, []);
622 assert_eq!(
623 schedule.system_sets,
624 [
625 simple_system_set("MySet<0>"),
626 simple_system_set("MySet<1>"),
627 simple_system_set("MySet<2>"),
628 ]
629 );
630 assert_eq!(schedule.hierarchy, []);
631 assert_eq!(
633 schedule.dependency,
634 [
635 (ScheduleIndex::SystemSet(0), ScheduleIndex::SystemSet(1)),
636 (ScheduleIndex::SystemSet(1), ScheduleIndex::SystemSet(2)),
637 ]
638 );
639 assert_eq!(schedule.components.len(), 0);
640 assert_eq!(schedule.conflicts.len(), 0);
641 }
642
643 #[test]
644 fn stack_of_system_sets() {
645 let mut app = App::empty();
646
647 fn a() {}
648
649 app.add_systems(Update, a.in_set(MySet::<0>))
650 .configure_sets(Update, MySet::<0>.in_set(MySet::<1>))
651 .configure_sets(Update, MySet::<1>.in_set(MySet::<2>));
652
653 let data = app_data_from_app(&mut app).unwrap();
654 assert_eq!(data.schedules.len(), 1);
655 let schedule = &data.schedules[0];
656 assert_eq!(schedule.name, "Update");
657 assert_eq!(schedule.systems, [simple_system("a")]);
658 assert_eq!(
659 schedule.system_sets,
660 [
661 simple_system_set("MySet<0>"),
662 simple_system_set("MySet<1>"),
663 simple_system_set("MySet<2>"),
664 simple_system_set("SystemTypeSet:a"),
665 ]
666 );
667 assert_eq!(
668 schedule.hierarchy,
669 [
670 (SystemSetIndex(0), ScheduleIndex::System(0)),
671 (SystemSetIndex(1), ScheduleIndex::SystemSet(0)),
672 (SystemSetIndex(2), ScheduleIndex::SystemSet(1)),
673 (SystemSetIndex(3), ScheduleIndex::System(0)),
674 ]
675 );
676 assert_eq!(schedule.dependency, []);
677 assert_eq!(schedule.components.len(), 0);
678 assert_eq!(schedule.conflicts.len(), 0);
679 }
680
681 #[test]
682 fn records_system_kind_flags() {
683 let mut app = App::empty();
684
685 fn a0(_commands: Commands) {}
686 fn a1(_commands: Commands) {}
687 fn b0() {}
688 fn b1() {}
689
690 fn c0() {}
691 fn c1() {}
692
693 app.add_systems(Update, (((a0, a1), (b0, b1)).chain(), (c0, c1).chain()));
694
695 let data = app_data_from_app(&mut app).unwrap();
696 assert_eq!(data.schedules.len(), 1);
697 let schedule = &data.schedules[0];
698 assert_eq!(schedule.name, "Update");
699 assert_eq!(
700 schedule.systems,
701 [
702 SystemData {
703 name: "a0".into(),
704 apply_deferred: false,
705 exclusive: false,
706 deferred: true,
707 },
708 SystemData {
709 name: "a1".into(),
710 apply_deferred: false,
711 exclusive: false,
712 deferred: true,
713 },
714 SystemData {
715 name: "apply_deferred".into(),
716 apply_deferred: true,
717 exclusive: true,
718 deferred: false,
719 },
720 simple_system("b0"),
721 simple_system("b1"),
722 simple_system("c0"),
723 simple_system("c1"),
724 ]
725 );
726 assert_eq!(
727 schedule.system_sets,
728 [
729 simple_system_set("SystemTypeSet:a0"),
730 simple_system_set("SystemTypeSet:a1"),
731 simple_system_set("SystemTypeSet:b0"),
732 simple_system_set("SystemTypeSet:b1"),
733 simple_system_set("SystemTypeSet:c0"),
734 simple_system_set("SystemTypeSet:c1"),
735 ]
736 );
737 assert_eq!(
738 schedule.hierarchy,
739 [
740 (SystemSetIndex(0), ScheduleIndex::System(0)),
741 (SystemSetIndex(1), ScheduleIndex::System(1)),
742 (SystemSetIndex(2), ScheduleIndex::System(3)),
743 (SystemSetIndex(3), ScheduleIndex::System(4)),
744 (SystemSetIndex(4), ScheduleIndex::System(5)),
745 (SystemSetIndex(5), ScheduleIndex::System(6)),
746 ]
747 );
748 assert_eq!(
749 schedule.dependency,
750 [
751 (ScheduleIndex::System(0), ScheduleIndex::System(2)),
753 (ScheduleIndex::System(0), ScheduleIndex::System(3)),
754 (ScheduleIndex::System(0), ScheduleIndex::System(4)),
755 (ScheduleIndex::System(1), ScheduleIndex::System(2)),
756 (ScheduleIndex::System(1), ScheduleIndex::System(3)),
757 (ScheduleIndex::System(1), ScheduleIndex::System(4)),
758 (ScheduleIndex::System(2), ScheduleIndex::System(3)),
760 (ScheduleIndex::System(2), ScheduleIndex::System(4)),
761 (ScheduleIndex::System(5), ScheduleIndex::System(6)),
763 ]
764 );
765 assert_eq!(schedule.components.len(), 0);
766 assert_eq!(schedule.conflicts.len(), 0);
767 }
768
769 #[test]
770 fn records_conflicts() {
771 let mut app = App::empty();
772
773 fn a0(_: Query<&MyComponent<0>>) {}
775 fn a1(_: Query<&MyComponent<0>>) {}
776
777 fn b0(_: Query<&MyComponent<1>>) {}
779 fn b1(_: Query<&mut MyComponent<1>>) {}
780
781 fn c0(
783 _: Query<(
784 &MyComponent<2>,
785 &mut MyComponent<3>,
786 &MyComponent<4>,
787 &MyComponent<5>,
788 )>,
789 ) {
790 }
791 fn c1(
792 _: Query<(
793 &mut MyComponent<2>,
794 &MyComponent<3>,
795 &MyComponent<4>,
796 &MyComponent<6>,
797 )>,
798 ) {
799 }
800
801 fn d0(_: Query<&mut MyComponent<7>, With<MyComponent<8>>>) {}
803 fn d1(_: Query<&mut MyComponent<7>, Without<MyComponent<8>>>) {}
804
805 fn e0(_: Query<&mut MyComponent<9>>) {}
807 fn e1(_: Query<&mut MyComponent<9>>) {}
808
809 app.add_systems(Update, (a0, a1, b0, b1, c0, c1, d0, d1, (e0, e1).chain()));
810
811 let data = app_data_from_app(&mut app).unwrap();
812 assert_eq!(data.schedules.len(), 1);
813 let schedule = &data.schedules[0];
814 assert_eq!(schedule.name, "Update");
815 assert_eq!(
816 schedule.systems,
817 [
818 simple_system("a0"),
819 simple_system("a1"),
820 simple_system("b0"),
821 simple_system("b1"),
822 simple_system("c0"),
823 simple_system("c1"),
824 simple_system("d0"),
825 simple_system("d1"),
826 simple_system("e0"),
827 simple_system("e1"),
828 ]
829 );
830 assert_eq!(
831 schedule.system_sets,
832 [
833 simple_system_set("SystemTypeSet:a0"),
834 simple_system_set("SystemTypeSet:a1"),
835 simple_system_set("SystemTypeSet:b0"),
836 simple_system_set("SystemTypeSet:b1"),
837 simple_system_set("SystemTypeSet:c0"),
838 simple_system_set("SystemTypeSet:c1"),
839 simple_system_set("SystemTypeSet:d0"),
840 simple_system_set("SystemTypeSet:d1"),
841 simple_system_set("SystemTypeSet:e0"),
842 simple_system_set("SystemTypeSet:e1"),
843 ]
844 );
845 assert_eq!(
846 schedule.hierarchy,
847 [
848 (SystemSetIndex(0), ScheduleIndex::System(0)),
849 (SystemSetIndex(1), ScheduleIndex::System(1)),
850 (SystemSetIndex(2), ScheduleIndex::System(2)),
851 (SystemSetIndex(3), ScheduleIndex::System(3)),
852 (SystemSetIndex(4), ScheduleIndex::System(4)),
853 (SystemSetIndex(5), ScheduleIndex::System(5)),
854 (SystemSetIndex(6), ScheduleIndex::System(6)),
855 (SystemSetIndex(7), ScheduleIndex::System(7)),
856 (SystemSetIndex(8), ScheduleIndex::System(8)),
857 (SystemSetIndex(9), ScheduleIndex::System(9)),
858 ]
859 );
860 assert_eq!(
861 schedule.dependency,
862 [
863 (ScheduleIndex::System(8), ScheduleIndex::System(9)),
865 ]
866 );
867 assert_eq!(
868 schedule.components,
869 [
870 simple_component("MyComponent<1>"),
871 simple_component("MyComponent<2>"),
872 simple_component("MyComponent<3>"),
873 ]
874 );
875 assert_eq!(
876 schedule.conflicts,
877 [
878 conflict(2, 3, AccessConflict::Components(vec![0])),
879 conflict(4, 5, AccessConflict::Components(vec![1, 2]))
880 ]
881 );
882 }
883}