Plushie.Effect.Result (Plushie v0.7.0)

Copy Markdown View Source

Typed results for platform effect responses.

Every Plushie.Event.EffectEvent carries a result field whose shape is one of the structs defined here. Apps pattern-match on the struct module for richly typed access to the effect outcome, rather than digging into a generic map.

Variants

Success:

  • %FileOpened{path: path} - file_open
  • %FilesOpened{paths: paths} - file_open_multiple
  • %FileSaved{path: path} - file_save
  • %DirectorySelected{path: path} - directory_select
  • %DirectoriesSelected{paths: paths} - directory_select_multiple
  • %ClipboardText{text: text} - clipboard_read / clipboard_read_primary
  • %ClipboardHtml{html: html, alt_text: alt_text} - clipboard_read_html
  • %ClipboardWritten{} - any clipboard write
  • %ClipboardCleared{} - clipboard_clear
  • %NotificationShown{} - notification

Non-success:

  • %Cancelled{} - the user dismissed the dialog
  • %Timeout{} - no response within the kind's timeout
  • %Error{message: message} - platform error
  • %Unsupported{} - this backend doesn't support the effect
  • %RendererRestarted{} - the renderer was restarted while the effect was pending

Pattern matching

def update(model, %Plushie.Event.EffectEvent{
  tag: :import,
  result: %Plushie.Effect.Result.FileOpened{path: path}
}) do
  load_file(model, path)
end

def update(model, %Plushie.Event.EffectEvent{
  tag: :import,
  result: %Plushie.Effect.Result.Cancelled{}
}) do
  model
end

The legacy tuple shape {:ok, value} / :cancelled / {:error, reason} is no longer emitted. Pre-1.0, there is no back-compat layer.

Summary

Types

t()

Union of every typed effect result.

Functions

Decode a renderer-supplied (kind, status, result_or_reason) triple into the appropriate struct.

Constructor used by the runtime when the renderer restarts with effects in flight.

Constructor used by the runtime for the timeout path.

Types

Functions

decode(kind, arg2, reason)

@spec decode(kind :: String.t(), status :: String.t(), payload :: term()) :: t()

Decode a renderer-supplied (kind, status, result_or_reason) triple into the appropriate struct.

kind is the effect kind string (e.g. "file_open") used at send time. status is the wire status. For "ok", payload is the decoded result map. For "error", payload is the reason string. Otherwise payload is ignored.

renderer_restarted()

@spec renderer_restarted() :: Plushie.Effect.Result.RendererRestarted.t()

Constructor used by the runtime when the renderer restarts with effects in flight.

timeout()

@spec timeout() :: Plushie.Effect.Result.Timeout.t()

Constructor used by the runtime for the timeout path.