type State { source: Json update: Bool checksum: Int } run(source: Json, update: Bool, ticks: Text) (sample: Sample) { input = dever.bytes.fromText(ticks) initial = State { source = source update = update checksum = 0 } output = transform(source, update) begin = dever.time.monotonicNanos() final = reduce(step, input, initial) end = dever.time.monotonicNanos() sample = Sample { elapsed_ns = end - begin checksum = final.checksum output = output } } type Sample { elapsed_ns: Int checksum: Int output: Text } step(unused: Int, state: State) (next: State) { output = transform(state.source, state.update) next = State { source = state.source update = state.update checksum = state.checksum + length(dever.bytes.fromText(output)) } } transform(source: Json, update: false) (output: Text) { output = selected(dever.json.propertyValue(source, "data")) } transform(source: Json, update: true) (output: Text) { output = dever.json.toText( dever.json.setProperty(source, "active", dever.json.boolean(true)) ) } selected(value: Json) (output: Text) { output = dever.json.toText(value) } selected(value: null) (output: Text) { output = "null" }