// Package rsc runs server components with a stateless, React/Next-style // request/response: the client POSTs the component name, its (opaque) signal // state, and any triggered event; the server restores the state, applies the // event, re-renders, and returns the new state + rendered tree, which the client // reconciles ("swaps") into the DOM. No persistent connection, no server-held // session — state round-trips through the client. // // This file holds the wire types (gob), shared by server and client. package rsc // SNode is a serialized render node. Nodes with server handlers carry an ID and // their event names; the client sends {name, state, ID, event} back so the // server can find and invoke the handler. type SNode struct { ID int Tag string Text string HTML string Attrs map[string]string Events []string Kids []*SNode } // Request is client -> server (every request is self-contained). type Request struct { Kind string // "mount" | "event" Name string // component name State [][]byte // opaque signal snapshot from the previous response NodeID int // event: node that fired Event string // event: event name Value string // event: target value (inputs) } // Response is server -> client. type Response struct { State [][]byte Tree *SNode }