1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
<span class="hljs-meta">@0xdbb9ad1f14bf0b36;</span> <span class="hljs-comment"># unique file ID, generated by `capnp id`</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Person</span> </span>{
name <span class="hljs-symbol">@0</span> :<span class="hljs-built_in">Text</span>;
birthdate <span class="hljs-symbol">@3</span> :Date;
email <span class="hljs-symbol">@1</span> :<span class="hljs-built_in">Text</span>;
phones <span class="hljs-symbol">@2</span> :<span class="hljs-built_in">List</span>(PhoneNumber);
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">PhoneNumber</span> </span>{
number <span class="hljs-symbol">@0</span> :<span class="hljs-built_in">Text</span>;
type <span class="hljs-symbol">@1</span> :Type;
<span class="hljs-class"><span class="hljs-keyword">enum</span> <span class="hljs-title">Type</span> </span>{
mobile <span class="hljs-symbol">@0</span>;
home <span class="hljs-symbol">@1</span>;
work <span class="hljs-symbol">@2</span>;
}
}
}
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Date</span> </span>{
year <span class="hljs-symbol">@0</span> :<span class="hljs-built_in">Int16</span>;
month <span class="hljs-symbol">@1</span> :<span class="hljs-built_in">UInt8</span>;
day <span class="hljs-symbol">@2</span> :<span class="hljs-built_in">UInt8</span>;
flags <span class="hljs-symbol">@3</span> :<span class="hljs-built_in">List</span>(<span class="hljs-built_in">Bool</span>) = [ <span class="hljs-literal">true</span>, <span class="hljs-literal">false</span>, <span class="hljs-literal">false</span>, <span class="hljs-literal">true</span> ];
}
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">Node</span> </span>{
isDirectory <span class="hljs-symbol">@0</span> () -> (result :<span class="hljs-built_in">Bool</span>);
}
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">Directory</span> extends(Node) </span>{
list <span class="hljs-symbol">@0</span> () -> (list: <span class="hljs-built_in">List</span>(Entry));
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">Entry</span> </span>{
name <span class="hljs-symbol">@0</span> :<span class="hljs-built_in">Text</span>;
node <span class="hljs-symbol">@1</span> :Node;
}
create <span class="hljs-symbol">@1</span> (name :<span class="hljs-built_in">Text</span>) -> (file :File);
mkdir <span class="hljs-symbol">@2</span> (name :<span class="hljs-built_in">Text</span>) -> (directory :Directory)
open <span class="hljs-symbol">@3</span> (name :<span class="hljs-built_in">Text</span>) -> (node :Node);
delete <span class="hljs-symbol">@4</span> (name :<span class="hljs-built_in">Text</span>);
link <span class="hljs-symbol">@5</span> (name :<span class="hljs-built_in">Text</span>, node :Node);
}
<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">File</span> extends(Node) </span>{
size <span class="hljs-symbol">@0</span> () -> (size: <span class="hljs-built_in">UInt64</span>);
read <span class="hljs-symbol">@1</span> (startAt :<span class="hljs-built_in">UInt64</span> = <span class="hljs-number">0</span>, amount :<span class="hljs-built_in">UInt64</span> = <span class="hljs-number">0</span>xffffffffffffffff)
-> (data: <span class="hljs-built_in">Data</span>);
<span class="hljs-comment"># Default params = read entire file.</span>
write <span class="hljs-symbol">@2</span> (startAt :<span class="hljs-built_in">UInt64</span>, data :<span class="hljs-built_in">Data</span>);
truncate <span class="hljs-symbol">@3</span> (size :<span class="hljs-built_in">UInt64</span>);
}
|