Struct apollo_framework::platform::Platform[][src]

pub struct Platform { /* fields omitted */ }
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

Creates a new platform instance..

Registers a new component.

Examples

struct Service {
    value: i32
}

let platform = Platform::new();
platform.register::<Service>(Arc::new(Service { value: 42 }));

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);

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>();

Determines if the platform is still running or if Platform::terminate has already been called.

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

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.