Skip to main content

Effects

Struct Effects 

Source
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>

Source

pub fn new(next_req_id: u64, registry: &'a mut ActionRegistry<S>) -> Self

Source

pub fn new_headless(next_req_id: u64) -> Self

Source

pub fn bind<A: Action, H>(&mut self, action: A, handler: H) -> ActionEnvelope
where H: IntoHandler<S, A> + Send + Sync + 'static,

Source

pub fn add(&mut self, effect: Effect) -> u64

Source

pub fn capability<C: OperationCapability>( &mut self, capability: CapabilityType<C>, request: C::Request, ) -> EffectBuilder<'_, 'a, S>

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn app<J: JobSpec>( &mut self, job: JobRef<J>, request: J::Request, ) -> EffectBuilder<'_, 'a, S>

Source

pub fn start_service<Svc: ServiceSpec>( &mut self, slot: ServiceSlot<Svc>, config: Svc::Config, ) -> ServiceStartBuilder<'_, 'a, S>

Source

pub fn command<Svc: ServiceSpec>( &mut self, slot: ServiceSlot<Svc>, command: Svc::Command, ) -> EffectBuilder<'_, 'a, S>

Source

pub fn stop_service<Svc: ServiceSpec>( &mut self, slot: ServiceSlot<Svc>, ) -> EffectBuilder<'_, 'a, S>

Source

pub fn cancel(&mut self, req_id: u64)

Source

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

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

Convert &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)

Convert &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> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.