Toddy.Iced.Widget protocol (Toddy v0.3.0)

Copy Markdown View Source

Protocol for converting typed widget structs to ui_node() maps.

Each widget module under Toddy.Iced.Widget.* defines a struct with typed fields and builder functions mirroring iced's API. This protocol converts those structs to the plain %{id, type, props, children} maps that the runtime, tree differ, and wire encoder expect.

The runtime calls this protocol automatically during tree normalization, so widget structs can be returned directly from view/1 without an explicit build/1 call.

Example

alias Toddy.Iced.Widget.Button

# Builder pattern -- struct returned, runtime converts automatically
Button.new("btn", "Click me")
|> Button.style(:primary)
|> Button.width(:fill)

# Explicit conversion if you want the map
Button.new("btn", "Click me")
|> Button.style(:primary)
|> Button.build()
#=> %{id: "btn", type: "button", props: %{"label" => "Click me", "style" => "primary"}, children: []}

Summary

Types

t()

All the types that implement this protocol.

Functions

Converts a widget struct to a Toddy.Iced.ui_node() map.

Types

t()

@type t() :: term()

All the types that implement this protocol.

Functions

to_node(widget)

@spec to_node(t()) :: Toddy.Iced.ui_node()

Converts a widget struct to a Toddy.Iced.ui_node() map.