Skip to main content

Mutation

Enum Mutation 

Source
pub enum Mutation<'a> {
Show 39 variants Create { node_id: u32, widget: WidgetKind, }, SetProp { node_id: u32, property: PropertyKind, value: PropertyValue<'a>, }, SetModifier { node_id: u32, index: u16, modifier: Modifier, }, Insert { parent_id: u32, node_id: u32, index: u32, }, Move { parent_id: u32, node_id: u32, index: u32, }, Remove { node_id: u32, }, SetText { node_id: u32, text: &'a str, selection: Option<Selection>, }, AppendText { node_id: u32, text: &'a str, }, SetTheme(Theme), SetWindow(Window), RegisterAsset { asset_id: u32, kind: AssetKind, bytes: &'a [u8], }, ReleaseAsset { asset_id: u32, }, ShowMessage { handler_id: u64, text: &'a str, action: &'a str, duration: MessageDuration, placement: Option<MessagePlacement>, offset_dp: Option<f32>, }, PostNotification { key: &'a str, title: &'a str, body: &'a str, channel: &'a str, action_1: &'a str, action_2: &'a str, importance: NotificationImportance, presentation: NotificationPresentation, }, WithdrawNotification { key: &'a str, }, RequestNotificationPermission, EditCode { node_id: u32, request_id: u32, base_version: u32, start_line: u32, start_column: u32, end_line: u32, end_column: u32, text: &'a str, }, StartAnimation(Animation<'a>), ControlAnimation { node_id: u32, animation_id: u32, property: AnimatedProperty, slot: u8, op: AnimationControl, at_time_nanos: u64, }, SetSelection { node_id: u32, base_version: u32, anchor_line: u32, anchor_column: u32, active_line: u32, active_column: u32, }, RevealRange { node_id: u32, base_version: u32, start_line: u32, start_column: u32, end_line: u32, end_column: u32, align: RevealAlign, }, SetFolded { node_id: u32, start_line: u32, collapsed: bool, }, SetWindowTheme { node_id: u32, theme: Theme, }, FocusWindow { node_id: u32, }, RequestFocus { node_id: u32, }, ShowFileDialog { request: u32, window: u32, kind: FileDialogKind, default_filter: u16, title: &'a str, directory: &'a str, name: &'a str, filters: &'a str, }, SetOverlayTokens(OverlayTokens), SetClipboardText { text: &'a str, }, ReadClipboard { request: u32, }, SetScrollOffset { node_id: u32, offset_px: f64, }, StorageCall { request: u32, op: StorageOp, store: &'a str, key: &'a str, data: &'a [u8], }, FileCall { request: u32, op: FileOp, create: bool, handle: u32, name: &'a str, data: &'a [u8], }, ReleaseFileHandle { handle: u32, }, ScrollTo { node_id: u32, item: u32, flags: u32, x_px: f64, y_px: f64, }, ScrollIntoView { node_id: u32, target: u32, target_kind: u16, align_x: u16, align_y: u16, flags: u16, rect: Rect, }, QueryPositionRect { node_id: u32, request: u32, line: u32, column: u32, }, EditCodeGroup { node_id: u32, request_id: u32, base_version: u32, edits: &'a [u8], }, InsertSnippet { node_id: u32, base_version: u32, start_line: u32, start_column: u32, end_line: u32, end_column: u32, snippet: &'a str, }, SetSelections { node_id: u32, base_version: u32, selections: &'a [u8], },
}

Variants§

§

Create

Fields

§node_id: u32
§widget: WidgetKind
§

SetProp

Fields

§node_id: u32
§property: PropertyKind
§value: PropertyValue<'a>
§

SetModifier

Fields

§node_id: u32
§index: u16
§modifier: Modifier
§

Insert

Fields

§parent_id: u32
§node_id: u32
§index: u32
§

Move

Fields

§parent_id: u32
§node_id: u32
§index: u32
§

Remove

Fields

§node_id: u32
§

SetText

Fields

§node_id: u32
§text: &'a str
§selection: Option<Selection>
§

AppendText

Appends the streamed tail to a Text node instead of resending the whole string.

Fields

§node_id: u32
§text: &'a str
§

SetTheme(Theme)

The root theme. Sent once as the first record of the initial batch.

§

SetWindow(Window)

What the application asked of its own window.

Written once per rebuild beside the theme, and read by the Renderer before it stands the window up: compose_rust_host_init answers with the first batch, so the setting is in hand before there is a window to apply it to. Platforms where the window is not ours ignore it, which is not an error but an absence of anywhere to put it.

§

RegisterAsset

Hands the Renderer the bytes of one asset. The Renderer copies them into its own cache inside this call, because the batch buffer is only valid for the call that carries it and an image has to outlive the frame that draws it.

Fields

§asset_id: u32
§bytes: &'a [u8]
§

ReleaseAsset

Drops an asset from the Renderer’s cache. The Host owns the lifetime.

Fields

§asset_id: u32
§

ShowMessage

Says a sentence to the user once. It is not a node, because the Host would then have to hold “showing until four seconds from now” and run a render to take it away again. How long it stays, where it sits and what happens when a second one arrives while the first is up are all the Renderer’s.

handler_id is what the action label reports when it is pressed, or 0 when the message has no action, in which case action is empty too.

placement and offset_dp are where the application asked for it to be drawn, and None leaves each to the design system. On the wire an absent placement is two zero tags and an absent offset is a NaN, so a record written before they existed reads as a message with neither.

Fields

§handler_id: u64
§text: &'a str
§action: &'a str
§offset_dp: Option<f32>
§

PostNotification

Asks the platform to show one notification outside the window.

Not a node, for the same reason a message is not: it outlives the component that posted it, and when it goes away depends on what the user does in the notification centre, which the Host never hears about. Posting again under the same key replaces it. An empty key asks the Renderer to name it, and such a notification can be neither replaced nor withdrawn. An empty action label means no button.

Fields

§key: &'a str
§title: &'a str
§body: &'a str
§channel: &'a str
§action_1: &'a str
§action_2: &'a str
§

WithdrawNotification

Takes back the notification posted under key, if it is still showing.

Fields

§key: &'a str
§

RequestNotificationPermission

Asks the platform for permission to show notifications. It carries nothing: the answer comes back as a permission event.

§

EditCode

Replaces a range of a code editor’s document, as it stood at base_version, with text.

The Renderer owns the document, so this is a request and not an assignment: where the reader has typed since that version the range is moved along with what they typed, and where they typed in the same place the edit is refused and CodeEditRejected names request_id. An edit that is applied comes back as an ordinary CodeChanged, so the version stays one sequence whoever made the edit.

Fields

§node_id: u32
§request_id: u32
§base_version: u32
§start_line: u32
§start_column: u32
§end_line: u32
§end_column: u32
§text: &'a str
§

StartAnimation(Animation<'a>)

Hands the Renderer one animation to play on its own frame clock until it ends. Nothing crosses the boundary while it plays unless it asked for events.

§

ControlAnimation

Pauses, resumes or cancels one animation the Renderer is playing. A key the Renderer does not hold, or an id that is not the one it holds, is left alone: an animation that ended on its own is not an error to stop.

Fields

§node_id: u32
§animation_id: u32
§slot: u8
§at_time_nanos: u64

On the Renderer’s frame clock. Zero means the first frame that draws it.

§

SetSelection

Puts a code editor’s selection between two places in the document as it stood at base_version. Both ends are moved along with whatever was typed since, and an end that is outside the document, or between the two halves of a pair, drops the command and comes back as a protocol error.

Fields

§node_id: u32
§base_version: u32
§anchor_line: u32
§anchor_column: u32
§active_line: u32
§active_column: u32
§

RevealRange

Scrolls a code editor until a range of the document, as it stood at base_version, is on screen. A range inside a folded stretch unfolds it first.

Fields

§node_id: u32
§base_version: u32
§start_line: u32
§start_column: u32
§end_line: u32
§end_column: u32
§

SetFolded

Folds or unfolds the stretch of a code editor that starts on start_line.

Fields

§node_id: u32
§start_line: u32
§collapsed: bool
§

SetWindowTheme

A theme for one Window node, over the application’s. The payload is SetTheme’s, after the node id. A window without one follows the application’s.

Fields

§node_id: u32
§theme: Theme
§

FocusWindow

Brings a window forward and makes it the key window. A command and not a property: it happens once.

Fields

§node_id: u32
§

RequestFocus

Moves input focus to node_id, or clears focus when node_id is 0.

Fields

§node_id: u32
§

ShowFileDialog

Asks the platform to show a file dialog on a window and answers later, once, with a FileDialogResult event that carries request.

window is a Window node id, or 0 for the implicit root window. filters is one string: a label and its comma-joined extensions as a pair, pairs joined by NUL ("Images\0png,jpg\0Docs\0pdf,txt"). default_filter is the position of the filter selected first.

Fields

§request: u32
§window: u32
§default_filter: u16
§title: &'a str
§directory: &'a str
§name: &'a str
§filters: &'a str
§

SetOverlayTokens(OverlayTokens)

Application-level overlay theme tokens for Dialog, Menu, Dropdown and Sheet.

§

SetClipboardText

Puts text on the platform clipboard as plain text.

Not a node and not answered: a Renderer with no clipboard drops it.

Fields

§text: &'a str
§

ReadClipboard

Asks for the plain text on the platform clipboard. Answered exactly once, later, by a ClipboardText event that carries request.

Fields

§request: u32
§

SetScrollOffset

Scrolls a code editor so that offset_px physical pixels of its document are above the top of its view. The Renderer keeps the offset inside what the document allows, and reports where it ended up through CodeScrolled like any other scroll.

Fields

§node_id: u32
§offset_px: f64
§

StorageCall

Asks the Renderer to carry out one operation on the application’s storage, where the Renderer is the side that can reach it (a browser’s IndexedDB). Answered exactly once, later, by an IoAnswer event that carries request.

store is the application identifier, key the value’s name (empty for Keys), and data the value to write (empty for every operation but Write).

Fields

§request: u32
§store: &'a str
§key: &'a str
§data: &'a [u8]
§

FileCall

Asks something of a file the Renderer holds a handle for: reading it, writing data to it, listing a folder, or finding (and with create, making) the child called name. Answered exactly once, later: a read or a write by an IoAnswer, a listing or a child by a FileHandles, and any of them that failed by an IoAnswer with the reason. name is empty but for Child, data but for Write.

Fields

§request: u32
§create: bool
§handle: u32
§name: &'a str
§data: &'a [u8]
§

ReleaseFileHandle

The Host holds nothing that names handle any more, so the Renderer may let go of the file behind it. Not answered. A handle the Renderer does not hold is ignored.

Fields

§handle: u32
§

ScrollTo

Asks the scroll container node_id to go to an offset in physical pixels. flags is the wire word (schema::scroll_to_flags): animate, apply x_px, apply y_px. An axis whose bit is off is not touched. item is the lazy list item the offset is measured from, and 0 elsewhere.

Fields

§node_id: u32
§item: u32
§flags: u32
§x_px: f64
§y_px: f64
§

ScrollIntoView

Asks the scroll container node_id to bring a rectangle into view. The fields are the wire’s: target_kind from schema::scroll_target_kind, the two alignments as schema::ScrollAlign values, and flags from schema::scroll_into_view_flags.

Fields

§node_id: u32
§target: u32
§target_kind: u16
§align_x: u16
§align_y: u16
§flags: u16
§rect: Rect
§

QueryPositionRect

Asks the code editor node_id where a caret at line and column would be drawn. Answered exactly once, by a PositionRect event carrying request: a rectangle in the window’s dp, or none where the position is not on screen.

Fields

§node_id: u32
§request: u32
§line: u32
§column: u32
§

EditCodeGroup

Replaces several ranges of a code editor’s document, as it stood at base_version, as one edit: all of them or none.

edits is the blob crate::code::encode_edit_group writes. Every range is in the document at base_version, so no edit moves another; they may come in any order and must not overlap. The Renderer answers each group with exactly one CodeEditGroupResult carrying request_id, after the CodeChanged events of the changes it made, one per edit from the end of the document backwards.

Fields

§node_id: u32
§request_id: u32
§base_version: u32
§edits: &'a [u8]
§

InsertSnippet

Replaces a range of a code editor’s document, as it stood at base_version, with a snippet, and lets the reader step through its tab stops.

snippet is in the subset of VS Code’s snippet syntax crate::code describes: $1, ${1:placeholder}, ${1|one,two|}, $0 and \$. The text it leaves is reported as ordinary CodeChanged events, and undoes as one step.

Fields

§node_id: u32
§base_version: u32
§start_line: u32
§start_column: u32
§end_line: u32
§end_column: u32
§snippet: &'a str
§

SetSelections

Sets every selection of a code editor at once, the first the primary one, each read against the document as it stood at base_version. selections is 16-byte records (anchor line, anchor column, active line, active column), which crate::code::encode_selections writes.

Fields

§node_id: u32
§base_version: u32
§selections: &'a [u8]

Trait Implementations§

Source§

impl<'a> Clone for Mutation<'a>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for Mutation<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> PartialEq for Mutation<'a>

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for Mutation<'a>

Auto Trait Implementations§

§

impl<'a> Forget for Mutation<'a>

§

impl<'a> Freeze for Mutation<'a>

§

impl<'a> Move for Mutation<'a>

§

impl<'a> RefUnwindSafe for Mutation<'a>

§

impl<'a> Send for Mutation<'a>

§

impl<'a> Sync for Mutation<'a>

§

impl<'a> Unpin for Mutation<'a>

§

impl<'a> UnsafeUnpin for Mutation<'a>

§

impl<'a> UnwindSafe for Mutation<'a>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.