pub trait System: Component {
// Required method
fn run(&self, context: SystemContext<'_>) -> Result<(), Box<dyn Error>>;
// Provided methods
fn should_run(&self, context: SystemContext<'_>) -> bool { ... }
fn try_run(&self, context: SystemContext<'_>) -> Result<(), Box<dyn Error>> { ... }
}