39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
// 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
|
|
}
|