guinea-iced 0.13.2

guinea on iced: the router and the application runtime, with Elm inside each node
docs.rs failed to build guinea-iced-0.13.2
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

guinea on iced: Elm inside a node, actors between nodes.

The other four backends are told what to draw and have no opinion about where a click goes. iced does: it is Elm, so every interaction is a value of one Message type that comes back to one update. That is the whole reason this adapter exists - it is the one that has to say what happens when a route tree of independent nodes meets a toolkit that wants a single message type at the top.

The answer is that a node keeps its own State, its own Message and its own update, all on the one trait that puts it in the route tree, and nothing above it ever names any of them. A parent does not wrap a child's messages, so adding a page costs no edit anywhere else - the composition tax Elm normally charges (a variant, a match arm, a map, per child, per level) is not paid at all. What the toolkit sees is [Envelope]: an opaque carrier holding the message, the node's own delivery function, and where in the chain that node sits.

What is left over is the part Elm has no answer for: two pieces of state that reference each other rather than nest - a selected row and a list an actor replaces. That is cx.on, and it is a translation, not a mutation: it turns what happened elsewhere into this node's own message, so there is still exactly one place the node's state changes.

#[page]
impl Page for Processes {
    type Params = ProcessesParams;
    type Message = Msg;

    fn observes(cx: &Observing<'_, Msg>) { cx.on::<ProcessesReducer>(list_replaced); }
    fn update(&mut self, message: Msg, cx: &mut UpdateCx<'_, Self>) { .. }
    fn view(&self, cx: &PageCx<'_, Self>) -> Element<'_, Msg> { .. }
}