Cairn · module

Cairn.Frame.Dump

lean/Cairn/Frame/Dump.lean

A canonical text dump of frames and events (docs/frame.md, "Canonical dump"). The Swift decoder's tests print the same format and compare it line for line with Lean's, and it is a readable form for the debug socket. Strings print printable ASCII as itself and every other Unicode scalar, " and \ as \u{HEX}.

Secrets a person typed never print. A secure field's text is bullets before it reaches a frame (Cairn.Text.SecureField.view), so its draws and text input print one \u{2022} per scalar and its accessibility node no value (secure_frame: a dump depends on a secure field's text only through its length). A request marked redact prints its URL, headers and body as <redacted N bytes>, N their UTF-8 and byte lengths together.

Imports Cairn.Frame.Events, Cairn.Frame.Build, Cairn.Text.Field

Order

Definitions 30

def

Cairn.Dump.hexDigits

lean/Cairn/Frame/Dump.lean:20
hexDigits (n : Nat) : String
def

Cairn.Dump.str

lean/Cairn/Frame/Dump.lean:25
str (s : String) : String
def

Cairn.Dump.rect

lean/Cairn/Frame/Dump.lean:31
rect (r : Rect) : String
def

Cairn.Dump.color

lean/Cairn/Frame/Dump.lean:32
color (c : Color) : String
def

Cairn.Dump.ref

lean/Cairn/Frame/Dump.lean:33
ref (c : ControlRef) : String
def

Cairn.Dump.opt

lean/Cairn/Frame/Dump.lean:34
opt {α : Type} (f : α → String) : Option α → String
def

Cairn.Dump.range

lean/Cairn/Frame/Dump.lean:37
range (p : Nat × Nat) : String
def

Cairn.Dump.bit

lean/Cairn/Frame/Dump.lean:38
bit (b : Bool) : String
def

Cairn.Dump.draw

lean/Cairn/Frame/Dump.lean:40
draw : Draw → String
def

Cairn.Dump.ax

lean/Cairn/Frame/Dump.lean:60
ax (n : AxNode) : String
def

Cairn.Dump.textInput

lean/Cairn/Frame/Dump.lean:66
textInput : Option TextInput → String
def

Cairn.Dump.bytes

lean/Cairn/Frame/Dump.lean:74
bytes (b : ByteArray) : String

Bytes as x and two lowercase hex digits each.

def

Cairn.Dump.headers

lean/Cairn/Frame/Dump.lean:77
headers (hs : List (String × String)) : String
def

Cairn.Dump.part

lean/Cairn/Frame/Dump.lean:80
part : Part → String
def

Cairn.Dump.secret

lean/Cairn/Frame/Dump.lean:84
secret (s : Secret) : String
def

Cairn.Dump.redactedBytes

lean/Cairn/Frame/Dump.lean:90
redactedBytes (u : String) (hs : List (String × String)) (b : ByteArray) : Nat

The bytes a redacted request hides: its URL, header names and values, and body.

def

Cairn.Dump.request

lean/Cairn/Frame/Dump.lean:93
request : Request → String
def

Cairn.Dump.effect

lean/Cairn/Frame/Dump.lean:120
effect : Effect → String
def

Cairn.Dump.subCmd

lean/Cairn/Frame/Dump.lean:133
subCmd : SubCmd → String
def

Cairn.Dump.reply

lean/Cairn/Frame/Dump.lean:141
reply : Reply → String
def

Cairn.Dump.canvas

lean/Cairn/Frame/Dump.lean:151
canvas (c : Canvas) : String
def

Cairn.Dump.shortcut

lean/Cairn/Frame/Dump.lean:160
shortcut (s : Shortcut) : String
def

Cairn.Dump.menuRecord

lean/Cairn/Frame/Dump.lean:162
menuRecord (m : MenuRecord) : String
def

Cairn.Dump.status

lean/Cairn/Frame/Dump.lean:167
status (s : StatusFrame) : String
def

Cairn.Dump.surface

lean/Cairn/Frame/Dump.lean:173
surface (s : SurfaceFrame) : String
def

Cairn.Dump.frame

lean/Cairn/Frame/Dump.lean:179
frame (f : Frame) : String

One line per item, each ending in a newline.

def

Cairn.Dump.subEvent

lean/Cairn/Frame/Dump.lean:189
subEvent : SubEvent → String
def

Cairn.Dump.event

lean/Cairn/Frame/Dump.lean:201
event : Event → String
def

Cairn.Dump.events

lean/Cairn/Frame/Dump.lean:229
events (es : Array Event) : String
def

Cairn.Dump.occurs

lean/Cairn/Frame/Dump.lean:251
occurs (needle s : String) : Bool

Whether needle occurs in s.

Theorems 2

theorem

Cairn.Dump.secure_frame

provedlean/Cairn/Frame/Dump.lean:241
secure_frame (render : FieldView → Frame) {f g : Text.SecureField}
  (h : f.Agree g) (focused : Bool) :
  frame (render (f.view focused)) = frame (render (g.view focused))

No secure text in a dump. However a frame is built from a secure field's view, its dump is the same for any two fields that agree on everything but which scalars were typed (Text.SecureField.Agree): the dump carries the text's length and nothing else of it.

theorem

Cairn.Dump.secure_canvas

provedlean/Cairn/Frame/Dump.lean:246
secure_canvas (render : FieldView → Canvas) {f g : Text.SecureField}
  (h : f.Agree g) (focused : Bool) :
  canvas (render (f.view focused)) = canvas (render (g.view focused))

The same for a single canvas, as the debug socket and the decoder tests print it.