55 lines
1.1 KiB
Text
55 lines
1.1 KiB
Text
|
@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);
|
||
|
}
|