@0xdbb9ad1f14bf0b36; # unique file ID, generated by `capnp id` struct Person { name @0 :Text; birthdate @3 :Date; email @1 :Text; phones @2 :List(PhoneNumber); struct PhoneNumber { number @0 :Text; type @1 :Type; enum Type { mobile @0; home @1; work @2; } } } struct Date { year @0 :Int16; month @1 :UInt8; day @2 :UInt8; flags @3 :List(Bool) = [ true, false, false, true ]; } interface Node { isDirectory @0 () -> (result :Bool); } interface Directory extends(Node) { list @0 () -> (list: List(Entry)); struct Entry { name @0 :Text; node @1 :Node; } create @1 (name :Text) -> (file :File); mkdir @2 (name :Text) -> (directory :Directory) open @3 (name :Text) -> (node :Node); delete @4 (name :Text); link @5 (name :Text, node :Node); } interface File extends(Node) { size @0 () -> (size: UInt64); read @1 (startAt :UInt64 = 0, amount :UInt64 = 0xffffffffffffffff) -> (data: Data); # Default params = read entire file. write @2 (startAt :UInt64, data :Data); truncate @3 (size :UInt64); }