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