Crates.io | lifecycle |
lib.rs | lifecycle |
version | 0.1.0 |
source | src |
created_at | 2021-05-27 03:46:31.401262 |
updated_at | 2021-05-27 03:46:31.401262 |
description | Rust implementation of https://github.com/stuartsierra/component |
homepage | |
repository | https://github.com/otaviopace/lifecycle |
max_upload_size | |
id | 402484 |
size | 7,809 |
Rust implementation of https://github.com/stuartsierra/component.
This library only contains a trait:
pub trait Lifecycle: Sized {
fn start(self) -> Self {
self
}
fn stop(self) -> Self {
self
}
}
It shines better using the crate derive-system
, you can use both like this:
[dependencies]
lifecycle = "0.1.0"
system-derive = "0.1.0"
use derive_system::System;
use lifecycle::Lifecycle;
struct App;
impl Lifecycle for App {
fn start(self) -> Self {
println!("App::start");
Self
}
fn stop(self) -> Self {
println!("App::stop");
Self
}
}
struct Scheduler;
impl Lifecycle for Scheduler {
fn start(self) -> Self {
println!("Scheduler::start");
Self
}
fn stop(self) -> Self {
println!("Scheduler::stop");
Self
}
}
struct Database;
impl Lifecycle for Database {
fn start(self) -> Self {
println!("Database::start");
Self
}
fn stop(self) -> Self {
println!("Database::stop");
Self
}
}
#[derive(System)]
pub struct ExampleSystem {
app: App,
scheduler: Scheduler,
database: Database,
}
fn main() {
let mut system = ExampleSystem {
app: App,
scheduler: Scheduler,
database: Database,
};
system = system.start();
let _ = system.stop();
}
This outputs:
App::start
Scheduler::start
Database::start
Database::stop
Scheduler::stop
App::stop