Expand description
§fission-core
The runtime, widget system, and action/reducer architecture for the Fission UI framework.
fission-core provides:
- A declarative widget tree built from composable primitives (
Node,Widget). - A unidirectional data-flow pipeline:
Action->Runtime::dispatch-> reducer -> mutatedAppState. - An effect system for async side-effects (
Effect,RuntimeEffect). - Built-in widgets:
Button,Text, [TextInput], [Container],Row,Column, [Scroll], [ZStack], [Grid], [LazyColumn], and more.
§Getting started
ⓘ
use fission_core::*;
use fission_core::ui::*;
// Define application state
#[derive(Debug, Default)]
struct MyState { value: String }
impl AppState for MyState {}
// Build a widget
struct MyWidget;
impl Widget<MyState> for MyWidget {
fn build(&self, ctx: &mut BuildCtx<MyState>, view: &View<MyState>) -> Node {
Text::new(&*view.state.value).into_node()
}
}Re-exports§
pub use action::Action;pub use action::ActionEnvelope;pub use action::ActionId;pub use action::ActionScopeId;pub use action::AppState;pub use async_runtime::BoxFuture;pub use async_runtime::JobCtx;pub use async_runtime::JobRef;pub use async_runtime::JobSpec;pub use async_runtime::ResourceExecutionContext;pub use async_runtime::ServiceBindings;pub use async_runtime::ServiceCtx;pub use async_runtime::ServiceRunner;pub use async_runtime::ServiceSlot;pub use async_runtime::ServiceSpec;pub use async_runtime::ServiceType;pub use capability::CapabilityCtx;pub use capability::CapabilityInvocationPayload;pub use capability::CapabilityType;pub use capability::OpenUrlCapability;pub use capability::OpenUrlRequest;pub use capability::OperationCapability;pub use capability::PickOpenFilesCapability;pub use capability::PickOpenFilesError;pub use capability::PickOpenFilesRequest;pub use capability::PickOpenFilesResult;pub use capability::PickedFile;pub use capability::OPEN_URL;pub use capability::PICK_OPEN_FILES;pub use context::BarcodeScannerEffects;pub use context::BiometricEffects;pub use context::BluetoothEffects;pub use context::CameraEffects;pub use context::ClipboardEffects;pub use context::Effects;pub use context::GeolocationEffects;pub use context::HapticEffects;pub use context::MicrophoneEffects;pub use context::NfcEffects;pub use context::NotificationEffects;pub use context::PasskeyEffects;pub use context::ReducerContext;pub use context::VolumeEffects;pub use context::WifiEffects;pub use effect::ActionInput;pub use effect::Effect;pub use effect::EffectEnvelope;pub use effect::RuntimeEffect;pub use env::Clipboard;pub use env::Env;pub use env::ImeHandler;pub use env::InteractionStateMap;pub use env::RuntimeState;pub use env::ScrollStateMap;pub use env::WindowEnv;pub use env::WindowTitle;pub use runtime::Runtime;pub use event::InputEvent;pub use event::KeyCode;pub use event::KeyEvent;pub use event::LifecycleEvent;pub use event::PointerButton;pub use event::PointerEvent;pub use lowering::LoweringContext;pub use lowering::NodeBuilder;pub use platform::CancelAllNotificationsCapability;pub use platform::CancelNotificationCapability;pub use platform::CancelNotificationRequest;pub use platform::DeepLink;pub use platform::DeepLinkConfig;pub use platform::DeepLinkReceived;pub use platform::DeepLinkSource;pub use platform::GetNotificationSettingsCapability;pub use platform::NotificationActionButton;pub use platform::NotificationError;pub use platform::NotificationId;pub use platform::NotificationPermission;pub use platform::NotificationPermissionRequest;pub use platform::NotificationReceipt;pub use platform::NotificationRequest;pub use platform::NotificationResponse;pub use platform::NotificationResponseReceived;pub use platform::NotificationSchedule;pub use platform::NotificationSettings;pub use platform::NotificationSound;pub use platform::PushPlatform;pub use platform::PushRegistration;pub use platform::PushRegistrationRequest;pub use platform::RegisterPushNotificationsCapability;pub use platform::RequestNotificationPermissionCapability;pub use platform::ScheduleNotificationCapability;pub use platform::SetBadgeCountCapability;pub use platform::SetBadgeCountRequest;pub use platform::ShowNotificationCapability;pub use platform::UnregisterPushNotificationsCapability;pub use platform::CANCEL_ALL_NOTIFICATIONS;pub use platform::CANCEL_NOTIFICATION;pub use platform::GET_NOTIFICATION_SETTINGS;pub use platform::REGISTER_PUSH_NOTIFICATIONS;pub use platform::REQUEST_NOTIFICATION_PERMISSION;pub use platform::SCHEDULE_NOTIFICATION;pub use platform::SET_BADGE_COUNT;pub use platform::SHOW_NOTIFICATION;pub use platform::UNREGISTER_PUSH_NOTIFICATIONS;pub use platform_barcode::BarcodeFormat;pub use platform_barcode::BarcodeImageDecodeRequest;pub use platform_barcode::BarcodePoint;pub use platform_barcode::BarcodeScanRequest;pub use platform_barcode::BarcodeScanResult;pub use platform_barcode::BarcodeScanResults;pub use platform_barcode::BarcodeScannerError;pub use platform_barcode::CancelBarcodeScanCapability;pub use platform_barcode::DecodeBarcodeImageCapability;pub use platform_barcode::ScanBarcodeCapability;pub use platform_barcode::CANCEL_BARCODE_SCAN;pub use platform_barcode::DECODE_BARCODE_IMAGE;pub use platform_barcode::SCAN_BARCODE;pub use platform_biometric::AuthenticateBiometricCapability;pub use platform_biometric::BiometricAuthenticateRequest;pub use platform_biometric::BiometricAuthenticateResult;pub use platform_biometric::BiometricAvailability;pub use platform_biometric::BiometricError;pub use platform_biometric::BiometricKind;pub use platform_biometric::BiometricStrength;pub use platform_biometric::CancelBiometricAuthenticationCapability;pub use platform_biometric::GetBiometricAvailabilityCapability;pub use platform_biometric::AUTHENTICATE_BIOMETRIC;pub use platform_biometric::CANCEL_BIOMETRIC_AUTHENTICATION;pub use platform_biometric::GET_BIOMETRIC_AVAILABILITY;pub use platform_bluetooth::BluetoothAdvertiseReceipt;pub use platform_bluetooth::BluetoothAdvertiseRequest;pub use platform_bluetooth::BluetoothAvailability;pub use platform_bluetooth::BluetoothConnectRequest;pub use platform_bluetooth::BluetoothConnection;pub use platform_bluetooth::BluetoothDevice;pub use platform_bluetooth::BluetoothDisconnectRequest;pub use platform_bluetooth::BluetoothError;pub use platform_bluetooth::BluetoothMode;pub use platform_bluetooth::BluetoothPermission;pub use platform_bluetooth::BluetoothPermissionRequest;pub use platform_bluetooth::BluetoothReadRequest;pub use platform_bluetooth::BluetoothReadResult;pub use platform_bluetooth::BluetoothScanRequest;pub use platform_bluetooth::BluetoothScanResult;pub use platform_bluetooth::BluetoothStopAdvertiseRequest;pub use platform_bluetooth::BluetoothWriteRequest;pub use platform_bluetooth::ConnectBluetoothDeviceCapability;pub use platform_bluetooth::DisconnectBluetoothDeviceCapability;pub use platform_bluetooth::GetBluetoothAvailabilityCapability;pub use platform_bluetooth::ReadBluetoothCharacteristicCapability;pub use platform_bluetooth::RequestBluetoothPermissionCapability;pub use platform_bluetooth::ScanBluetoothDevicesCapability;pub use platform_bluetooth::StartBluetoothAdvertisingCapability;pub use platform_bluetooth::StopBluetoothAdvertisingCapability;pub use platform_bluetooth::WriteBluetoothCharacteristicCapability;pub use platform_bluetooth::CONNECT_BLUETOOTH_DEVICE;pub use platform_bluetooth::DISCONNECT_BLUETOOTH_DEVICE;pub use platform_bluetooth::GET_BLUETOOTH_AVAILABILITY;pub use platform_bluetooth::READ_BLUETOOTH_CHARACTERISTIC;pub use platform_bluetooth::REQUEST_BLUETOOTH_PERMISSION;pub use platform_bluetooth::SCAN_BLUETOOTH_DEVICES;pub use platform_bluetooth::START_BLUETOOTH_ADVERTISING;pub use platform_bluetooth::STOP_BLUETOOTH_ADVERTISING;pub use platform_bluetooth::WRITE_BLUETOOTH_CHARACTERISTIC;pub use platform_camera::CameraAvailability;pub use platform_camera::CameraCapture;pub use platform_camera::CameraCaptureRequest;pub use platform_camera::CameraDevice;pub use platform_camera::CameraError;pub use platform_camera::CameraFacing;pub use platform_camera::CameraFlashMode;pub use platform_camera::CameraFlashlightRequest;pub use platform_camera::CameraImageFormat;pub use platform_camera::CameraPermission;pub use platform_camera::CameraPermissionRequest;pub use platform_camera::CameraResolution;pub use platform_camera::CancelCameraCaptureCapability;pub use platform_camera::CapturePhotoCapability;pub use platform_camera::GetCameraAvailabilityCapability;pub use platform_camera::RequestCameraPermissionCapability;pub use platform_camera::SetCameraFlashlightCapability;pub use platform_camera::CANCEL_CAMERA_CAPTURE;pub use platform_camera::CAPTURE_PHOTO;pub use platform_camera::GET_CAMERA_AVAILABILITY;pub use platform_camera::REQUEST_CAMERA_PERMISSION;pub use platform_camera::SET_CAMERA_FLASHLIGHT;pub use platform_clipboard::ClearClipboardCapability;pub use platform_clipboard::ClipboardContent;pub use platform_clipboard::ClipboardError;pub use platform_clipboard::ClipboardItem;pub use platform_clipboard::ClipboardText;pub use platform_clipboard::ClipboardWriteTextRequest;pub use platform_clipboard::ReadClipboardContentCapability;pub use platform_clipboard::ReadClipboardTextCapability;pub use platform_clipboard::WriteClipboardContentCapability;pub use platform_clipboard::WriteClipboardTextCapability;pub use platform_clipboard::CLEAR_CLIPBOARD;pub use platform_clipboard::READ_CLIPBOARD_CONTENT;pub use platform_clipboard::READ_CLIPBOARD_TEXT;pub use platform_clipboard::WRITE_CLIPBOARD_CONTENT;pub use platform_clipboard::WRITE_CLIPBOARD_TEXT;pub use platform_geolocation::GeolocationError;pub use platform_geolocation::GeolocationPermission;pub use platform_geolocation::GeolocationPermissionRequest;pub use platform_geolocation::GeolocationPosition;pub use platform_geolocation::GeolocationPositionRequest;pub use platform_geolocation::GetCurrentPositionCapability;pub use platform_geolocation::GetGeolocationPermissionCapability;pub use platform_geolocation::RequestGeolocationPermissionCapability;pub use platform_geolocation::GET_CURRENT_POSITION;pub use platform_geolocation::GET_GEOLOCATION_PERMISSION;pub use platform_geolocation::REQUEST_GEOLOCATION_PERMISSION;pub use platform_haptics::HapticError;pub use platform_haptics::HapticImpactCapability;pub use platform_haptics::HapticImpactRequest;pub use platform_haptics::HapticImpactStyle;pub use platform_haptics::HapticNotificationCapability;pub use platform_haptics::HapticNotificationKind;pub use platform_haptics::HapticNotificationRequest;pub use platform_haptics::HapticPatternCapability;pub use platform_haptics::HapticPatternRequest;pub use platform_haptics::HapticPatternStep;pub use platform_haptics::HapticSelectionCapability;pub use platform_haptics::HAPTIC_IMPACT;pub use platform_haptics::HAPTIC_NOTIFICATION;pub use platform_haptics::HAPTIC_PATTERN;pub use platform_haptics::HAPTIC_SELECTION;pub use platform_microphone::AudioSampleFormat;pub use platform_microphone::CancelMicrophoneCaptureCapability;pub use platform_microphone::CaptureMicrophoneAudioCapability;pub use platform_microphone::GetMicrophoneAvailabilityCapability;pub use platform_microphone::MicrophoneAvailability;pub use platform_microphone::MicrophoneCapture;pub use platform_microphone::MicrophoneCaptureRequest;pub use platform_microphone::MicrophoneDevice;pub use platform_microphone::MicrophoneError;pub use platform_microphone::MicrophonePermission;pub use platform_microphone::MicrophonePermissionRequest;pub use platform_microphone::RequestMicrophonePermissionCapability;pub use platform_microphone::CANCEL_MICROPHONE_CAPTURE;pub use platform_microphone::CAPTURE_MICROPHONE_AUDIO;pub use platform_microphone::GET_MICROPHONE_AVAILABILITY;pub use platform_microphone::REQUEST_MICROPHONE_PERMISSION;pub use platform_nfc::CancelNfcSessionCapability;pub use platform_nfc::EmulateNfcTagCapability;pub use platform_nfc::GetNfcAvailabilityCapability;pub use platform_nfc::NfcAvailability;pub use platform_nfc::NfcEmulationRequest;pub use platform_nfc::NfcError;pub use platform_nfc::NfcRecord;pub use platform_nfc::NfcRecordTypeNameFormat;pub use platform_nfc::NfcScanRequest;pub use platform_nfc::NfcSessionReceipt;pub use platform_nfc::NfcTag;pub use platform_nfc::NfcTagDiscovered;pub use platform_nfc::NfcTechnology;pub use platform_nfc::NfcWriteRequest;pub use platform_nfc::ScanNfcTagCapability;pub use platform_nfc::WriteNfcTagCapability;pub use platform_nfc::CANCEL_NFC_SESSION;pub use platform_nfc::EMULATE_NFC_TAG;pub use platform_nfc::GET_NFC_AVAILABILITY;pub use platform_nfc::SCAN_NFC_TAG;pub use platform_nfc::WRITE_NFC_TAG;pub use platform_passkey::AuthenticatePasskeyCapability;pub use platform_passkey::CancelPasskeyOperationCapability;pub use platform_passkey::GetPasskeyAvailabilityCapability;pub use platform_passkey::PasskeyAlgorithm;pub use platform_passkey::PasskeyAttestationConveyance;pub use platform_passkey::PasskeyAuthenticationRequest;pub use platform_passkey::PasskeyAuthenticationResult;pub use platform_passkey::PasskeyAuthenticatorAttachment;pub use platform_passkey::PasskeyAuthenticatorSelection;pub use platform_passkey::PasskeyAvailability;pub use platform_passkey::PasskeyCredentialDescriptor;pub use platform_passkey::PasskeyError;pub use platform_passkey::PasskeyMediation;pub use platform_passkey::PasskeyRegistrationRequest;pub use platform_passkey::PasskeyRegistrationResult;pub use platform_passkey::PasskeyRelyingParty;pub use platform_passkey::PasskeyResidentKeyRequirement;pub use platform_passkey::PasskeyTransport;pub use platform_passkey::PasskeyUser;pub use platform_passkey::PasskeyUserVerification;pub use platform_passkey::RegisterPasskeyCapability;pub use platform_passkey::AUTHENTICATE_PASSKEY;pub use platform_passkey::CANCEL_PASSKEY_OPERATION;pub use platform_passkey::GET_PASSKEY_AVAILABILITY;pub use platform_passkey::REGISTER_PASSKEY;pub use platform_volume::AdjustVolumeLevelCapability;pub use platform_volume::GetVolumeLevelCapability;pub use platform_volume::SetVolumeLevelCapability;pub use platform_volume::VolumeAdjustDirection;pub use platform_volume::VolumeAdjustRequest;pub use platform_volume::VolumeError;pub use platform_volume::VolumeLevel;pub use platform_volume::VolumeSetRequest;pub use platform_volume::VolumeStream;pub use platform_volume::ADJUST_VOLUME_LEVEL;pub use platform_volume::GET_VOLUME_LEVEL;pub use platform_volume::SET_VOLUME_LEVEL;pub use platform_wifi::ConnectWifiNetworkCapability;pub use platform_wifi::DisconnectWifiNetworkCapability;pub use platform_wifi::GetWifiAvailabilityCapability;pub use platform_wifi::RequestWifiPermissionCapability;pub use platform_wifi::ScanWifiNetworksCapability;pub use platform_wifi::WifiAvailability;pub use platform_wifi::WifiConnectRequest;pub use platform_wifi::WifiConnection;pub use platform_wifi::WifiDisconnectRequest;pub use platform_wifi::WifiError;pub use platform_wifi::WifiNetwork;pub use platform_wifi::WifiPermission;pub use platform_wifi::WifiPermissionRequest;pub use platform_wifi::WifiScanRequest;pub use platform_wifi::WifiScanResult;pub use platform_wifi::WifiSecurity;pub use platform_wifi::CONNECT_WIFI_NETWORK;pub use platform_wifi::DISCONNECT_WIFI_NETWORK;pub use platform_wifi::GET_WIFI_AVAILABILITY;pub use platform_wifi::REQUEST_WIFI_PERMISSION;pub use platform_wifi::SCAN_WIFI_NETWORKS;pub use registry::ActionRegistry;pub use registry::AnimationPropertyId;pub use registry::AnimationRequest;pub use registry::AnimationStartValue;pub use registry::BuildCtx;pub use registry::EasingFunction;pub use registry::Handler;pub use registry::JobResource;pub use registry::PortalLayer;pub use registry::RawActionHandler;pub use registry::ResourceKey;pub use registry::ResourcePolicy;pub use registry::ResourceRegistry;pub use registry::RuntimeResourceDeclaration;pub use registry::RuntimeResourceKind;pub use registry::ServiceResource;pub use registry::TimerResource;pub use registry::VideoRegistration;pub use time::Clock;pub use time::CurrentTime;pub use ui::ActionScope;pub use ui::Builder;pub use ui::Button;pub use ui::Column;pub use ui::CustomEventResult;pub use ui::CustomHitResult;pub use ui::CustomNode;pub use ui::CustomRenderObject;pub use ui::LayoutBuilder;pub use ui::Lower;pub use ui::LowerDyn;pub use ui::Node;pub use ui::Row;pub use ui::Text;pub use view::Selector;pub use view::View;pub use view::Widget;
Modules§
- action
- Actions, envelopes, and application state traits.
- async_
runtime - capability
- context
- Reducer context and effect builder.
- diff
- effect
- Side-effect primitives for async operations.
- env
- event
- Input events consumed by the
Runtime. - hit_
test - input
- lowering
- media
- op
- platform
- Platform services shared by Fission shells.
- platform_
barcode - Barcode scanner host capabilities.
- platform_
biometric - Biometric authentication host capabilities.
- platform_
bluetooth - Bluetooth host capabilities.
- platform_
camera - Camera and flashlight host capabilities.
- platform_
clipboard - Clipboard host capabilities.
- platform_
geolocation - Geolocation host capabilities.
- platform_
haptics - Haptics host capabilities.
- platform_
microphone - Microphone host capabilities.
- platform_
nfc - NFC host capabilities.
- platform_
passkey - Passkey and WebAuthn host capabilities.
- platform_
volume - Volume-control host capabilities.
- platform_
wifi - Wi-Fi host capabilities.
- registry
- runtime
- scrollbar
- time
- ui
- view
- Read-only view, widget trait, and selector pattern.
Macros§
- reduce
- Short alias for
reduce_with!. - reduce_
with - Coerces a reducer function item or non-capturing closure to the handler
function-pointer type Rust can infer from the surrounding
ctx.bind(...)call. - with_
reducer - Binds an action to a reducer in one expression.
Structs§
- ADVANCE_
TO_ ACTION_ ID - Advance
To - An action that sets the runtime clock to an absolute timestamp.
- BoxConstraints
- Minimum and maximum width/height bounds passed from parent to child during layout.
- Layout
Engine - The constraint-based layout solver.
- Layout
Point - A 2D point in layout coordinate space.
- Layout
Rect - An axis-aligned rectangle: an origin point plus a size.
- Layout
Size - A 2D size in layout coordinate space.
- Layout
Snapshot - The complete output of a layout pass.
- NodeId
- A content-addressed 128-bit node identity.
- TICK_
ACTION_ ID - Tick
- A frame-tick action that advances the runtime clock by a delta.
- Widget
Node Id - A 128-bit identity for a widget.
Enums§
Traits§
- Text
Measurer - A platform-provided text measurement backend.
Type Aliases§
- Boxed
Reducer - A type-erased reducer function stored in the
Runtime. - Layout
Unit - The scalar type used for all layout measurements.