yumemi/gen/emit/codec
back の codec(WGy、0.11.1)── src/gen/codec.mjs。行(Postgres の JSON)と Gleam の値の間の写しを、
Entity と値型の宣言から書く。共通の口(checked・parse・option・encode・phase …)は framework の
yumemi/server/codec.mjs が持ち、生成物は表(scalar・整数の値型)と Entity ごとの decoder だけを持つ。
導く規則(Property の型ごと、列は reader の FieldDef と同じ):
| 型 | 写し |
|---|---|
値型(gen/types/*) | parse('<名>', v)(整数の値型は Number(v)、文字列は String(v)) |
PartyId / Blob / Color / Secret | checked(party.parse(v)) / checked(blob.parse(String(v))) / checked(color.parse(String(v))) / secret.hmac(String(v)) |
Datetime / Date / Time | cDatetime(v) / cDate(v) / cTime(v) |
Int / Float / Bool / String | Number(v) / Number(v) / Boolean(v) / String(v) |
Held(E) / Has(E) / Link(E) | er.held_from_row({key:r.<prop>_id}) / er.from_row(..) / option(r.<prop>_id, v=>er.key(String(v))) |
| 構成子だけの sum | phase(<module>, v) |
| payload を持つ sum | <型>.decode<型>(r)(src/gen/<型>.mjs) |
| 欄を持つ record(1 構成子) | new <module>.<型>(<欄ごとに同じ規則>)(jsonb の object) |
Option(T) / List(T) | option(v, ..) / list(v, ..) |
宣言から導けない decoder(列の形が宣言と違う、ER の外の集計など)は、server.hooks に decode_<名> の
hook を宣言すると、生成物がその ★ を名指しで re-export する(導いた decoder より hook が勝つ)。
規則で導けない Property を持つ Entity は decoder を出さず、file の頭に名指しする。
Values
pub fn text(
app: model.App,
units: List(source.Unit),
input: String,
) -> String