flyt

05 — Personal<T>

Personal data is a type. Erasure is one call.

The host seals each person's data under their own key. Erasing them destroys the key.

holders/*.flyt
record Holder {
  name: Personal<HolderName>
  email: Personal<Email>
}

mutation erase(id: HolderId) -> Erasure {
  let Erased = personal.erase(id)
  Erased
}
  • subject h_1 sealing key live · 4 sealed values
  • subject h_2 sealing key live · 2 sealed values

Everywhere the host stored it

rows rewritten by an erase: 0
PlaceReferenceValues
Entity rowholders/h_1name Ingrid Haugenemail ingrid@example.com
Past versionholders/h_1 · v1name Ingrid Haugan
EventRegisteredemail ingrid@example.com
Ledger postingpostings/p_412holder h_1amount EUR 120.00
Entity rowholders/h_2name Lars Bakkenemail lars@example.com
Ledger postingpostings/p_413holder h_2amount EUR 40.00
flyt check · the build is refusedlet name = sealed.value_or(holder.name, fallback: "") entity.append(entities.note, key: id, state: Note { text: name })error[E426] personal_data: `state` of `entities.note.append` is opened from a `Personal` value: a row would keep it past its subject's erasure