pub struct Effects<'a, S: AppState> {
pub out: Vec<EffectEnvelope>,
/* private fields */
}Expand description
Builder for emitting side-effects from within a reducer.
Effects accumulates EffectEnvelope values that the runtime collects
after the reducer returns. Each effect can carry optional on_ok and
on_err callbacks.
§Example
fn handle_save(
state: &mut MyState,
_action: Save,
ctx: &mut ReducerContext<MyState>,
) {
ctx.effects.capability(MY_CAPABILITY, request)
.on_ok(ctx.effects.bind(SaveOk, handle_save_ok as fn(&mut MyState, SaveOk)))
.on_err(ctx.effects.bind(SaveErr, handle_save_err as fn(&mut MyState, SaveErr)));
}Fields§
§out: Vec<EffectEnvelope>Accumulated effect envelopes, drained by the runtime after the reducer.
Implementations§
Source§impl<'a, S: AppState> Effects<'a, S>
impl<'a, S: AppState> Effects<'a, S>
pub fn new(next_req_id: u64, registry: &'a mut ActionRegistry<S>) -> Self
pub fn new_headless(next_req_id: u64) -> Self
pub fn bind<A: Action, H>(&mut self, action: A, handler: H) -> ActionEnvelope
pub fn add(&mut self, effect: Effect) -> u64
pub fn capability<C: OperationCapability>( &mut self, capability: CapabilityType<C>, request: C::Request, ) -> EffectBuilder<'_, 'a, S>
Sourcepub fn notifications(&mut self) -> NotificationEffects<'_, 'a, S>
pub fn notifications(&mut self) -> NotificationEffects<'_, 'a, S>
Starts a typed notification capability request.
Use this from reducers when the app needs the host to request notification permission, show or schedule a notification, update a badge, or register for push delivery. The returned builder records a capability effect; it does not display anything until the reducer has returned and the active shell processes queued effects.
Sourcepub fn nfc(&mut self) -> NfcEffects<'_, 'a, S>
pub fn nfc(&mut self) -> NfcEffects<'_, 'a, S>
Starts a typed NFC capability request.
Use this when the app needs the host to read, write, emulate, or cancel an NFC session. The helper keeps NFC prompts, tag records, and timeout choices in typed request values so reducers do not call platform NFC APIs directly.
Sourcepub fn biometrics(&mut self) -> BiometricEffects<'_, 'a, S>
pub fn biometrics(&mut self) -> BiometricEffects<'_, 'a, S>
Starts a typed biometric authentication capability request.
Use this for host-owned local user verification such as fingerprint, face, or device credential fallback. The result reports whether the host verified the local user; it is not a network identity assertion.
Sourcepub fn passkeys(&mut self) -> PasskeyEffects<'_, 'a, S>
pub fn passkeys(&mut self) -> PasskeyEffects<'_, 'a, S>
Starts a typed passkey/WebAuthn credential capability request.
Use this for account sign-in, re-authentication, or credential
registration flows where the server verifies WebAuthn data. This is
intentionally separate from biometrics(): the host may use biometrics
to unlock a passkey, but the app receives credential data, not raw face
or fingerprint state.
Sourcepub fn bluetooth(&mut self) -> BluetoothEffects<'_, 'a, S>
pub fn bluetooth(&mut self) -> BluetoothEffects<'_, 'a, S>
Starts a typed Bluetooth capability request.
Use this for nearby-device workflows such as adapter availability, permission requests, scanning, connecting, characteristic reads and writes, and advertising. Scans and connections are host-owned operations because permission and hardware behavior differ sharply by platform.
Sourcepub fn barcode_scanner(&mut self) -> BarcodeScannerEffects<'_, 'a, S>
pub fn barcode_scanner(&mut self) -> BarcodeScannerEffects<'_, 'a, S>
Starts a typed barcode scanner capability request.
Use this when the host should run a live scanner session or decode image bytes into barcode results. Live scanning normally depends on camera permission; image decoding can be tested without camera hardware.
Sourcepub fn camera(&mut self) -> CameraEffects<'_, 'a, S>
pub fn camera(&mut self) -> CameraEffects<'_, 'a, S>
Starts a typed camera and flashlight capability request.
Use this for camera availability, permission, still photo capture, and torch control. The returned helper emits requests to the shell host so the app state does not depend on a particular camera API.
Sourcepub fn clipboard(&mut self) -> ClipboardEffects<'_, 'a, S>
pub fn clipboard(&mut self) -> ClipboardEffects<'_, 'a, S>
Starts a typed clipboard capability request.
Use this for user-visible copy and paste flows. Platforms may restrict clipboard access to focused windows, secure browser contexts, or direct user gestures, so reducers should handle errors as normal outcomes.
Sourcepub fn geolocation(&mut self) -> GeolocationEffects<'_, 'a, S>
pub fn geolocation(&mut self) -> GeolocationEffects<'_, 'a, S>
Starts a typed geolocation capability request.
Use this when the app needs permission state or a current location. The request controls accuracy, timeout, and cache age so the host can choose an appropriate platform location call.
Sourcepub fn haptics(&mut self) -> HapticEffects<'_, 'a, S>
pub fn haptics(&mut self) -> HapticEffects<'_, 'a, S>
Starts a typed haptic feedback capability request.
Use this for tactile feedback tied to meaningful interactions such as impact, notification, selection, or a bounded pattern. Unsupported hosts should return a typed error rather than pretending vibration occurred.
Sourcepub fn microphone(&mut self) -> MicrophoneEffects<'_, 'a, S>
pub fn microphone(&mut self) -> MicrophoneEffects<'_, 'a, S>
Starts a typed microphone capability request.
Use this for microphone availability, permission, bounded audio capture, and cancellation. Captures should be explicit and time-bounded because recording is a sensitive host-owned operation.
Sourcepub fn wifi(&mut self) -> WifiEffects<'_, 'a, S>
pub fn wifi(&mut self) -> WifiEffects<'_, 'a, S>
Starts a typed Wi-Fi capability request.
Use this for adapter availability, permission, scanning, connecting, and disconnecting where the platform allows app-level Wi-Fi management. Many platforms treat Wi-Fi information as location-sensitive, so reducers should handle permission and unsupported errors explicitly.
Sourcepub fn volume(&mut self) -> VolumeEffects<'_, 'a, S>
pub fn volume(&mut self) -> VolumeEffects<'_, 'a, S>
Starts a typed host volume-control capability request.
Use this for app-approved media, notification, alarm, call, or system stream adjustments. Some platforms expose only media-element volume or no system-volume control, so callers should treat unsupported errors as normal platform outcomes.
pub fn app<J: JobSpec>( &mut self, job: JobRef<J>, request: J::Request, ) -> EffectBuilder<'_, 'a, S>
pub fn start_service<Svc: ServiceSpec>( &mut self, slot: ServiceSlot<Svc>, config: Svc::Config, ) -> ServiceStartBuilder<'_, 'a, S>
pub fn command<Svc: ServiceSpec>( &mut self, slot: ServiceSlot<Svc>, command: Svc::Command, ) -> EffectBuilder<'_, 'a, S>
pub fn stop_service<Svc: ServiceSpec>( &mut self, slot: ServiceSlot<Svc>, ) -> EffectBuilder<'_, 'a, S>
pub fn cancel(&mut self, req_id: u64)
pub fn release_resource(&mut self, resource_id: u64)
Auto Trait Implementations§
impl<'a, S> Freeze for Effects<'a, S>
impl<'a, S> !RefUnwindSafe for Effects<'a, S>
impl<'a, S> Send for Effects<'a, S>
impl<'a, S> Sync for Effects<'a, S>
impl<'a, S> Unpin for Effects<'a, S>where
S: Unpin,
impl<'a, S> UnsafeUnpin for Effects<'a, S>
impl<'a, S> !UnwindSafe for Effects<'a, S>
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>. Box<dyn Any> can
then be further downcast into Box<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>. Rc<Any> 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.