use springtime::application;
use springtime::future::{BoxFuture, FutureExt};
use springtime::runner::ApplicationRunner;
use springtime_di::instance_provider::ErrorPtr;
use springtime_di::{component_alias, Component};
#[derive(Component)]
struct PrintHelloRunner;
#[component_alias]
impl ApplicationRunner for PrintHelloRunner {
fn run(&self) -> BoxFuture<'_, Result<(), ErrorPtr>> {
async {
print!("Hello ");
Ok(())
}
.boxed()
}
fn priority(&self) -> i8 {
3
}
}
#[derive(Component)]
struct PrintWorldRunner;
#[component_alias]
impl ApplicationRunner for PrintWorldRunner {
fn run(&self) -> BoxFuture<'_, Result<(), ErrorPtr>> {
async {
print!("world");
Ok(())
}
.boxed()
}
fn priority(&self) -> i8 {
2
}
}
#[derive(Component)]
struct PrintExclamationRunner;
#[component_alias]
impl ApplicationRunner for PrintExclamationRunner {
fn run(&self) -> BoxFuture<'_, Result<(), ErrorPtr>> {
async {
println!("!");
Ok(())
}
.boxed()
}
fn priority(&self) -> i8 {
1
}
}
#[tokio::main]
async fn main() {
let mut application =
application::create_default().expect("unable to create default application");
application.run().await.expect("error running application");
}