aboutsummaryrefslogtreecommitdiffstats
path: root/prototypes/connections/examples/editor.pure
blob: 4de78bcca0b5ba567e9ff7c4c1cd180331b9a80f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// A revision-checked byte edit. The input carries only the replacement.
// UTF-8 cursor/grapheme positions are translated to byte ranges by the UI.
layout Edit {
    start: u32le;
    remove: u32le;
    insert: bytes;
}

on get {
    let document = store.read(request.key);
    reply(document, document.body);
}

on put {
    let edit = view(Edit, request.body);
    let saved = store.splice(request.key, request.revision,
                             edit.start, edit.remove, edit.insert);
    reply(saved, edit.insert);
}