cannam@62: # Copyright (c) 2015 Sandstorm Development Group, Inc. and contributors cannam@62: # Licensed under the MIT License: cannam@62: # cannam@62: # Permission is hereby granted, free of charge, to any person obtaining a copy cannam@62: # of this software and associated documentation files (the "Software"), to deal cannam@62: # in the Software without restriction, including without limitation the rights cannam@62: # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell cannam@62: # copies of the Software, and to permit persons to whom the Software is cannam@62: # furnished to do so, subject to the following conditions: cannam@62: # cannam@62: # The above copyright notice and this permission notice shall be included in cannam@62: # all copies or substantial portions of the Software. cannam@62: # cannam@62: # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR cannam@62: # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, cannam@62: # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE cannam@62: # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER cannam@62: # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, cannam@62: # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN cannam@62: # THE SOFTWARE. cannam@62: cannam@62: @0x8ef99297a43a5e34; cannam@62: cannam@62: $import "/capnp/c++.capnp".namespace("capnp"); cannam@62: cannam@62: struct JsonValue { cannam@62: union { cannam@62: null @0 :Void; cannam@62: boolean @1 :Bool; cannam@62: number @2 :Float64; cannam@62: string @3 :Text; cannam@62: array @4 :List(JsonValue); cannam@62: object @5 :List(Field); cannam@62: # Standard JSON values. cannam@62: cannam@62: call @6 :Call; cannam@62: # Non-standard: A "function call", applying a named function (named by a single identifier) cannam@62: # to a parameter list. Examples: cannam@62: # cannam@62: # BinData(0, "Zm9vCg==") cannam@62: # ISODate("2015-04-15T08:44:50.218Z") cannam@62: # cannam@62: # Mongo DB users will recognize the above as exactly the syntax Mongo uses to represent BSON cannam@62: # "binary" and "date" types in text, since JSON has no analog of these. This is basically the cannam@62: # reason this extension exists. We do NOT recommend using `call` unless you specifically need cannam@62: # to be compatible with some silly format that uses this syntax. cannam@62: } cannam@62: cannam@62: struct Field { cannam@62: name @0 :Text; cannam@62: value @1 :JsonValue; cannam@62: } cannam@62: cannam@62: struct Call { cannam@62: function @0 :Text; cannam@62: params @1 :List(JsonValue); cannam@62: } cannam@62: }