pub struct Platform { /* private fields */ }
Expand description
Provides a container to keep all central services in a single place.
§Examples
Building and accessing components:
struct Service {}
#[tokio::main]
async fn main() {
let platform = Platform::new();
platform.register(Arc::new(Service {}));
assert_eq!(platform.find::<Service>().is_some(), true);
}
Checking the central “is running” active..
struct Service {}
#[tokio::main]
async fn main() {
let platform = Platform::new();
platform.register(Arc::new(Service {}));
// By default the platform is running...
assert_eq!(platform.is_running(), true);
// once terminated...
platform.terminate();
// all services are evicted so that their Dropped handlers are executed
assert_eq!(platform.find::<Service>().is_some(), false);
// the platform is considered halted...
assert_eq!(platform.is_running(), false);
}
Implementations§
source§impl Platform
impl Platform
sourcepub fn register<T>(&self, service: Arc<T>)
pub fn register<T>(&self, service: Arc<T>)
Registers a new component.
§Examples
struct Service {
value: i32
}
let platform = Platform::new();
platform.register::<Service>(Arc::new(Service { value: 42 }));
sourcepub fn find<T>(&self) -> Option<Arc<T>>
pub fn find<T>(&self) -> Option<Arc<T>>
Tries to resolve a previously registered service.
Note, if one knows for certain, that a service will be present, Platform::require can be used.
§Examples
struct Service {
value: i32
}
struct UnknownService;
let platform = Platform::new();
platform.register::<Service>(Arc::new(Service { value: 42 }));
// A lookup for a known service yields a result..
assert_eq!(platform.find::<Service>().unwrap().value, 42);
// A lookup for an unknown service returns None...
assert_eq!(platform.find::<UnknownService>().is_none(), true);
sourcepub fn require<T>(&self) -> Arc<T>
pub fn require<T>(&self) -> Arc<T>
Resolve a previously registered service.
Note, if the framework is already shutting down, all services are evicted. Therefor this might panic even if it worked before Platform::terminate was invoked.
§Panics
Panics if the requested service isn’t available.
§Examples
struct Service {
value: i32
}
let platform = Platform::new();
platform.register::<Service>(Arc::new(Service { value: 42 }));
// A lookup for a known service yields a result..
assert_eq!(platform.require::<Service>().value, 42);
Requiring a service which is unknown will panic:
struct UnknownService;
let platform = Platform::new();
// This will panic...
platform.require::<UnknownService>();
sourcepub fn is_running(&self) -> bool
pub fn is_running(&self) -> bool
Determines if the platform is still running or if Platform::terminate has already been called.
sourcepub fn terminate(&self)
pub fn terminate(&self)
Terminates the platform.
This will immediately release all services (so that the Dropped handlers run eventually). It will also toggle the is_running() flag to false.
Auto Trait Implementations§
impl !Freeze for Platform
impl RefUnwindSafe for Platform
impl Send for Platform
impl Sync for Platform
impl Unpin for Platform
impl UnwindSafe for Platform
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more