# stage.rs - source
Source of the Rust file `maplibre/src/tcs/system/stage.rs`.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    use crate::{
        context::MapContext,
        schedule::Stage,
        tcs::system::{IntoSystemContainer, SystemContainer},
    };

    #[derive(Default)]
    pub struct SystemStage {
        systems: Vec<SystemContainer>,
    }

    impl SystemStage {
        #[must_use]
        pub fn with_system(mut self, system: impl IntoSystemContainer) -> Self {
            self.add_system(system);
            self
        }

        pub fn add_system(&mut self, system: impl IntoSystemContainer) -> &mut Self {
            self.systems.push(system.into_container());
            self
        }
    }

    impl Stage for SystemStage {
        fn run(&mut self, context: &mut MapContext) {
            for container in &mut self.systems {
                #[cfg(feature = "trace")]
                let _span =
                    tracing::info_span!("system", name = container.system.name().as_ref()).entered();
                container.system.run(context)
            }
        }
    }