#[non_exhaustive]pub struct BlockingService<Request, Streams: StreamPack = ()> {
pub request: Request,
pub streams: Streams::StreamBuffers,
pub provider: Entity,
pub source: Entity,
pub session: Entity,
}Expand description
Use BlockingService to indicate that your system is a blocking Service.
A blocking service will have exclusive world access while it runs, which means no other system will be able to run simultaneously. Each service is associated with its own unique entity which can be used to store state or configuration parameters.
Some services might need to know what entity is providing the service, e.g.
if the service provider is configured with additional components that need
to be queried when a request comes in. For that you can check the provider
field of BlockingService:
use bevy_ecs::prelude::*;
use crossflow::prelude::*;
#[derive(Component, Resource)]
struct Precision(i32);
fn rounding_service(
In(BlockingService{request, provider, ..}): BlockingServiceInput<f64>,
service_precision: Query<&Precision>,
global_precision: Res<Precision>,
) -> f64 {
let precision = service_precision.get(provider).unwrap_or(&*global_precision).0;
(request * 10_f64.powi(precision)).floor() * 10_f64.powi(-precision)
}Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.request: RequestThe input data of the request
streams: Streams::StreamBuffersThe buffer to hold stream output data until the function is finished
provider: EntityThe entity providing the service
source: EntityThe node in a workflow or series that asked for the service
session: EntityThe unique session ID for the workflow
Auto Trait Implementations§
impl<Request, Streams> Freeze for BlockingService<Request, Streams>
impl<Request, Streams> RefUnwindSafe for BlockingService<Request, Streams>
impl<Request, Streams> Send for BlockingService<Request, Streams>
impl<Request, Streams> Sync for BlockingService<Request, Streams>
impl<Request, Streams> Unpin for BlockingService<Request, Streams>
impl<Request, Streams> UnwindSafe for BlockingService<Request, Streams>
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
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