Shared JSON payload serializers used by API controllers and channels.
Null policy
String-typed fields are never null — an unset value serializes as "".
Game clients (Godot in particular) choke on null where they expect a
string. Datetimes, numbers and objects keep null where absence is
semantic (e.g. ends_at: null = permanent).
Summary
Functions
Serializes a ready check for its participants.
Functions
Serializes a ready check for its participants.
A "ready" check lists every participant and their state — lobby members
already see each other. An "accept" check returns counts and the viewer's
own state only: a match that may still dissolve should not reveal who the
player was paired with.