Canonical JSON codec helpers for root boundary contracts.
@spec decode!(String.t(), module()) :: struct()
@spec digest(struct() | map() | list() | String.t() | integer() | boolean() | nil) :: String.t()
@spec encode!(struct() | map()) :: String.t()
@spec round_trip!( struct(), module() ) :: struct()