```rust
pub const Msg = union(enum) {
add,
toggle: u32,
set_filter: Filter,
clear_done,
draft_edit: canvas.TextInputEvent,
chrome_changed: native_sdk.WindowChrome,
};
pub fn update(model: *Model, msg: Msg) void {
switch (msg) {
.add => {
if (model.draftEmpty()) {
model.addGeneratedTask();
} else {
model.addTask(std.mem.trim(u8, model.draft(), " "));
model.draft_buffer.clear();
}
},
.toggle => |id| if (model.taskById(id)) |task| {
task.done = !task.done;
},
.set_filter => |filter| model.filter = filter,
.clear_done => model.clearDone(),
.draft_edit => |edit| model.draft_buffer.apply(edit),
.chrome_changed => |chrome| {
model.chrome_leading = chrome.insets.left;
model.header_height = @max(header_natural_height, chrome.insets.top);
},
}
}
```