mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-03-03 16:33:53 +08:00
bring over phonelibs minus frida-gum and qsml
This commit is contained in:
58
phonelibs/capnp-cpp/mac/include/capnp/compat/json.capnp
Normal file
58
phonelibs/capnp-cpp/mac/include/capnp/compat/json.capnp
Normal file
@@ -0,0 +1,58 @@
|
||||
# Copyright (c) 2015 Sandstorm Development Group, Inc. and contributors
|
||||
# Licensed under the MIT License:
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
@0x8ef99297a43a5e34;
|
||||
|
||||
$import "/capnp/c++.capnp".namespace("capnp");
|
||||
|
||||
struct JsonValue {
|
||||
union {
|
||||
null @0 :Void;
|
||||
boolean @1 :Bool;
|
||||
number @2 :Float64;
|
||||
string @3 :Text;
|
||||
array @4 :List(JsonValue);
|
||||
object @5 :List(Field);
|
||||
# Standard JSON values.
|
||||
|
||||
call @6 :Call;
|
||||
# Non-standard: A "function call", applying a named function (named by a single identifier)
|
||||
# to a parameter list. Examples:
|
||||
#
|
||||
# BinData(0, "Zm9vCg==")
|
||||
# ISODate("2015-04-15T08:44:50.218Z")
|
||||
#
|
||||
# Mongo DB users will recognize the above as exactly the syntax Mongo uses to represent BSON
|
||||
# "binary" and "date" types in text, since JSON has no analog of these. This is basically the
|
||||
# reason this extension exists. We do NOT recommend using `call` unless you specifically need
|
||||
# to be compatible with some silly format that uses this syntax.
|
||||
}
|
||||
|
||||
struct Field {
|
||||
name @0 :Text;
|
||||
value @1 :JsonValue;
|
||||
}
|
||||
|
||||
struct Call {
|
||||
function @0 :Text;
|
||||
params @1 :List(JsonValue);
|
||||
}
|
||||
}
|
||||
860
phonelibs/capnp-cpp/mac/include/capnp/compat/json.capnp.h
Normal file
860
phonelibs/capnp-cpp/mac/include/capnp/compat/json.capnp.h
Normal file
@@ -0,0 +1,860 @@
|
||||
// Generated by Cap'n Proto compiler, DO NOT EDIT
|
||||
// source: json.capnp
|
||||
|
||||
#ifndef CAPNP_INCLUDED_8ef99297a43a5e34_
|
||||
#define CAPNP_INCLUDED_8ef99297a43a5e34_
|
||||
|
||||
#include <capnp/generated-header-support.h>
|
||||
#if !CAPNP_LITE
|
||||
#include <capnp/capability.h>
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
#if CAPNP_VERSION != 6001
|
||||
#error "Version mismatch between generated code and library headers. You must use the same version of the Cap'n Proto compiler and library."
|
||||
#endif
|
||||
|
||||
|
||||
namespace capnp {
|
||||
namespace schemas {
|
||||
|
||||
CAPNP_DECLARE_SCHEMA(8825ffaa852cda72);
|
||||
CAPNP_DECLARE_SCHEMA(c27855d853a937cc);
|
||||
CAPNP_DECLARE_SCHEMA(9bbf84153dd4bb60);
|
||||
|
||||
} // namespace schemas
|
||||
} // namespace capnp
|
||||
|
||||
namespace capnp {
|
||||
|
||||
struct JsonValue {
|
||||
JsonValue() = delete;
|
||||
|
||||
class Reader;
|
||||
class Builder;
|
||||
class Pipeline;
|
||||
enum Which: uint16_t {
|
||||
NULL_,
|
||||
BOOLEAN,
|
||||
NUMBER,
|
||||
STRING,
|
||||
ARRAY,
|
||||
OBJECT,
|
||||
CALL,
|
||||
};
|
||||
struct Field;
|
||||
struct Call;
|
||||
|
||||
struct _capnpPrivate {
|
||||
CAPNP_DECLARE_STRUCT_HEADER(8825ffaa852cda72, 2, 1)
|
||||
#if !CAPNP_LITE
|
||||
static constexpr ::capnp::_::RawBrandedSchema const* brand() { return &schema->defaultBrand; }
|
||||
#endif // !CAPNP_LITE
|
||||
};
|
||||
};
|
||||
|
||||
struct JsonValue::Field {
|
||||
Field() = delete;
|
||||
|
||||
class Reader;
|
||||
class Builder;
|
||||
class Pipeline;
|
||||
|
||||
struct _capnpPrivate {
|
||||
CAPNP_DECLARE_STRUCT_HEADER(c27855d853a937cc, 0, 2)
|
||||
#if !CAPNP_LITE
|
||||
static constexpr ::capnp::_::RawBrandedSchema const* brand() { return &schema->defaultBrand; }
|
||||
#endif // !CAPNP_LITE
|
||||
};
|
||||
};
|
||||
|
||||
struct JsonValue::Call {
|
||||
Call() = delete;
|
||||
|
||||
class Reader;
|
||||
class Builder;
|
||||
class Pipeline;
|
||||
|
||||
struct _capnpPrivate {
|
||||
CAPNP_DECLARE_STRUCT_HEADER(9bbf84153dd4bb60, 0, 2)
|
||||
#if !CAPNP_LITE
|
||||
static constexpr ::capnp::_::RawBrandedSchema const* brand() { return &schema->defaultBrand; }
|
||||
#endif // !CAPNP_LITE
|
||||
};
|
||||
};
|
||||
|
||||
// =======================================================================================
|
||||
|
||||
class JsonValue::Reader {
|
||||
public:
|
||||
typedef JsonValue Reads;
|
||||
|
||||
Reader() = default;
|
||||
inline explicit Reader(::capnp::_::StructReader base): _reader(base) {}
|
||||
|
||||
inline ::capnp::MessageSize totalSize() const {
|
||||
return _reader.totalSize().asPublic();
|
||||
}
|
||||
|
||||
#if !CAPNP_LITE
|
||||
inline ::kj::StringTree toString() const {
|
||||
return ::capnp::_::structString(_reader, *_capnpPrivate::brand());
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline Which which() const;
|
||||
inline bool isNull() const;
|
||||
inline ::capnp::Void getNull() const;
|
||||
|
||||
inline bool isBoolean() const;
|
||||
inline bool getBoolean() const;
|
||||
|
||||
inline bool isNumber() const;
|
||||
inline double getNumber() const;
|
||||
|
||||
inline bool isString() const;
|
||||
inline bool hasString() const;
|
||||
inline ::capnp::Text::Reader getString() const;
|
||||
|
||||
inline bool isArray() const;
|
||||
inline bool hasArray() const;
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Reader getArray() const;
|
||||
|
||||
inline bool isObject() const;
|
||||
inline bool hasObject() const;
|
||||
inline ::capnp::List< ::capnp::JsonValue::Field>::Reader getObject() const;
|
||||
|
||||
inline bool isCall() const;
|
||||
inline bool hasCall() const;
|
||||
inline ::capnp::JsonValue::Call::Reader getCall() const;
|
||||
|
||||
private:
|
||||
::capnp::_::StructReader _reader;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::_::PointerHelpers;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::List;
|
||||
friend class ::capnp::MessageBuilder;
|
||||
friend class ::capnp::Orphanage;
|
||||
};
|
||||
|
||||
class JsonValue::Builder {
|
||||
public:
|
||||
typedef JsonValue Builds;
|
||||
|
||||
Builder() = delete; // Deleted to discourage incorrect usage.
|
||||
// You can explicitly initialize to nullptr instead.
|
||||
inline Builder(decltype(nullptr)) {}
|
||||
inline explicit Builder(::capnp::_::StructBuilder base): _builder(base) {}
|
||||
inline operator Reader() const { return Reader(_builder.asReader()); }
|
||||
inline Reader asReader() const { return *this; }
|
||||
|
||||
inline ::capnp::MessageSize totalSize() const { return asReader().totalSize(); }
|
||||
#if !CAPNP_LITE
|
||||
inline ::kj::StringTree toString() const { return asReader().toString(); }
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline Which which();
|
||||
inline bool isNull();
|
||||
inline ::capnp::Void getNull();
|
||||
inline void setNull( ::capnp::Void value = ::capnp::VOID);
|
||||
|
||||
inline bool isBoolean();
|
||||
inline bool getBoolean();
|
||||
inline void setBoolean(bool value);
|
||||
|
||||
inline bool isNumber();
|
||||
inline double getNumber();
|
||||
inline void setNumber(double value);
|
||||
|
||||
inline bool isString();
|
||||
inline bool hasString();
|
||||
inline ::capnp::Text::Builder getString();
|
||||
inline void setString( ::capnp::Text::Reader value);
|
||||
inline ::capnp::Text::Builder initString(unsigned int size);
|
||||
inline void adoptString(::capnp::Orphan< ::capnp::Text>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::Text> disownString();
|
||||
|
||||
inline bool isArray();
|
||||
inline bool hasArray();
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder getArray();
|
||||
inline void setArray( ::capnp::List< ::capnp::JsonValue>::Reader value);
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder initArray(unsigned int size);
|
||||
inline void adoptArray(::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>> disownArray();
|
||||
|
||||
inline bool isObject();
|
||||
inline bool hasObject();
|
||||
inline ::capnp::List< ::capnp::JsonValue::Field>::Builder getObject();
|
||||
inline void setObject( ::capnp::List< ::capnp::JsonValue::Field>::Reader value);
|
||||
inline ::capnp::List< ::capnp::JsonValue::Field>::Builder initObject(unsigned int size);
|
||||
inline void adoptObject(::capnp::Orphan< ::capnp::List< ::capnp::JsonValue::Field>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List< ::capnp::JsonValue::Field>> disownObject();
|
||||
|
||||
inline bool isCall();
|
||||
inline bool hasCall();
|
||||
inline ::capnp::JsonValue::Call::Builder getCall();
|
||||
inline void setCall( ::capnp::JsonValue::Call::Reader value);
|
||||
inline ::capnp::JsonValue::Call::Builder initCall();
|
||||
inline void adoptCall(::capnp::Orphan< ::capnp::JsonValue::Call>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::JsonValue::Call> disownCall();
|
||||
|
||||
private:
|
||||
::capnp::_::StructBuilder _builder;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
friend class ::capnp::Orphanage;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::_::PointerHelpers;
|
||||
};
|
||||
|
||||
#if !CAPNP_LITE
|
||||
class JsonValue::Pipeline {
|
||||
public:
|
||||
typedef JsonValue Pipelines;
|
||||
|
||||
inline Pipeline(decltype(nullptr)): _typeless(nullptr) {}
|
||||
inline explicit Pipeline(::capnp::AnyPointer::Pipeline&& typeless)
|
||||
: _typeless(kj::mv(typeless)) {}
|
||||
|
||||
private:
|
||||
::capnp::AnyPointer::Pipeline _typeless;
|
||||
friend class ::capnp::PipelineHook;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
class JsonValue::Field::Reader {
|
||||
public:
|
||||
typedef Field Reads;
|
||||
|
||||
Reader() = default;
|
||||
inline explicit Reader(::capnp::_::StructReader base): _reader(base) {}
|
||||
|
||||
inline ::capnp::MessageSize totalSize() const {
|
||||
return _reader.totalSize().asPublic();
|
||||
}
|
||||
|
||||
#if !CAPNP_LITE
|
||||
inline ::kj::StringTree toString() const {
|
||||
return ::capnp::_::structString(_reader, *_capnpPrivate::brand());
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline bool hasName() const;
|
||||
inline ::capnp::Text::Reader getName() const;
|
||||
|
||||
inline bool hasValue() const;
|
||||
inline ::capnp::JsonValue::Reader getValue() const;
|
||||
|
||||
private:
|
||||
::capnp::_::StructReader _reader;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::_::PointerHelpers;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::List;
|
||||
friend class ::capnp::MessageBuilder;
|
||||
friend class ::capnp::Orphanage;
|
||||
};
|
||||
|
||||
class JsonValue::Field::Builder {
|
||||
public:
|
||||
typedef Field Builds;
|
||||
|
||||
Builder() = delete; // Deleted to discourage incorrect usage.
|
||||
// You can explicitly initialize to nullptr instead.
|
||||
inline Builder(decltype(nullptr)) {}
|
||||
inline explicit Builder(::capnp::_::StructBuilder base): _builder(base) {}
|
||||
inline operator Reader() const { return Reader(_builder.asReader()); }
|
||||
inline Reader asReader() const { return *this; }
|
||||
|
||||
inline ::capnp::MessageSize totalSize() const { return asReader().totalSize(); }
|
||||
#if !CAPNP_LITE
|
||||
inline ::kj::StringTree toString() const { return asReader().toString(); }
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline bool hasName();
|
||||
inline ::capnp::Text::Builder getName();
|
||||
inline void setName( ::capnp::Text::Reader value);
|
||||
inline ::capnp::Text::Builder initName(unsigned int size);
|
||||
inline void adoptName(::capnp::Orphan< ::capnp::Text>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::Text> disownName();
|
||||
|
||||
inline bool hasValue();
|
||||
inline ::capnp::JsonValue::Builder getValue();
|
||||
inline void setValue( ::capnp::JsonValue::Reader value);
|
||||
inline ::capnp::JsonValue::Builder initValue();
|
||||
inline void adoptValue(::capnp::Orphan< ::capnp::JsonValue>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::JsonValue> disownValue();
|
||||
|
||||
private:
|
||||
::capnp::_::StructBuilder _builder;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
friend class ::capnp::Orphanage;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::_::PointerHelpers;
|
||||
};
|
||||
|
||||
#if !CAPNP_LITE
|
||||
class JsonValue::Field::Pipeline {
|
||||
public:
|
||||
typedef Field Pipelines;
|
||||
|
||||
inline Pipeline(decltype(nullptr)): _typeless(nullptr) {}
|
||||
inline explicit Pipeline(::capnp::AnyPointer::Pipeline&& typeless)
|
||||
: _typeless(kj::mv(typeless)) {}
|
||||
|
||||
inline ::capnp::JsonValue::Pipeline getValue();
|
||||
private:
|
||||
::capnp::AnyPointer::Pipeline _typeless;
|
||||
friend class ::capnp::PipelineHook;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
class JsonValue::Call::Reader {
|
||||
public:
|
||||
typedef Call Reads;
|
||||
|
||||
Reader() = default;
|
||||
inline explicit Reader(::capnp::_::StructReader base): _reader(base) {}
|
||||
|
||||
inline ::capnp::MessageSize totalSize() const {
|
||||
return _reader.totalSize().asPublic();
|
||||
}
|
||||
|
||||
#if !CAPNP_LITE
|
||||
inline ::kj::StringTree toString() const {
|
||||
return ::capnp::_::structString(_reader, *_capnpPrivate::brand());
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline bool hasFunction() const;
|
||||
inline ::capnp::Text::Reader getFunction() const;
|
||||
|
||||
inline bool hasParams() const;
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Reader getParams() const;
|
||||
|
||||
private:
|
||||
::capnp::_::StructReader _reader;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::_::PointerHelpers;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::List;
|
||||
friend class ::capnp::MessageBuilder;
|
||||
friend class ::capnp::Orphanage;
|
||||
};
|
||||
|
||||
class JsonValue::Call::Builder {
|
||||
public:
|
||||
typedef Call Builds;
|
||||
|
||||
Builder() = delete; // Deleted to discourage incorrect usage.
|
||||
// You can explicitly initialize to nullptr instead.
|
||||
inline Builder(decltype(nullptr)) {}
|
||||
inline explicit Builder(::capnp::_::StructBuilder base): _builder(base) {}
|
||||
inline operator Reader() const { return Reader(_builder.asReader()); }
|
||||
inline Reader asReader() const { return *this; }
|
||||
|
||||
inline ::capnp::MessageSize totalSize() const { return asReader().totalSize(); }
|
||||
#if !CAPNP_LITE
|
||||
inline ::kj::StringTree toString() const { return asReader().toString(); }
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
inline bool hasFunction();
|
||||
inline ::capnp::Text::Builder getFunction();
|
||||
inline void setFunction( ::capnp::Text::Reader value);
|
||||
inline ::capnp::Text::Builder initFunction(unsigned int size);
|
||||
inline void adoptFunction(::capnp::Orphan< ::capnp::Text>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::Text> disownFunction();
|
||||
|
||||
inline bool hasParams();
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder getParams();
|
||||
inline void setParams( ::capnp::List< ::capnp::JsonValue>::Reader value);
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder initParams(unsigned int size);
|
||||
inline void adoptParams(::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>>&& value);
|
||||
inline ::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>> disownParams();
|
||||
|
||||
private:
|
||||
::capnp::_::StructBuilder _builder;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
friend class ::capnp::Orphanage;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::_::PointerHelpers;
|
||||
};
|
||||
|
||||
#if !CAPNP_LITE
|
||||
class JsonValue::Call::Pipeline {
|
||||
public:
|
||||
typedef Call Pipelines;
|
||||
|
||||
inline Pipeline(decltype(nullptr)): _typeless(nullptr) {}
|
||||
inline explicit Pipeline(::capnp::AnyPointer::Pipeline&& typeless)
|
||||
: _typeless(kj::mv(typeless)) {}
|
||||
|
||||
private:
|
||||
::capnp::AnyPointer::Pipeline _typeless;
|
||||
friend class ::capnp::PipelineHook;
|
||||
template <typename, ::capnp::Kind>
|
||||
friend struct ::capnp::ToDynamic_;
|
||||
};
|
||||
#endif // !CAPNP_LITE
|
||||
|
||||
// =======================================================================================
|
||||
|
||||
inline ::capnp::JsonValue::Which JsonValue::Reader::which() const {
|
||||
return _reader.getDataField<Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
inline ::capnp::JsonValue::Which JsonValue::Builder::which() {
|
||||
return _builder.getDataField<Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isNull() const {
|
||||
return which() == JsonValue::NULL_;
|
||||
}
|
||||
inline bool JsonValue::Builder::isNull() {
|
||||
return which() == JsonValue::NULL_;
|
||||
}
|
||||
inline ::capnp::Void JsonValue::Reader::getNull() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::NULL_),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return _reader.getDataField< ::capnp::Void>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
|
||||
inline ::capnp::Void JsonValue::Builder::getNull() {
|
||||
KJ_IREQUIRE((which() == JsonValue::NULL_),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return _builder.getDataField< ::capnp::Void>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
inline void JsonValue::Builder::setNull( ::capnp::Void value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::NULL_);
|
||||
_builder.setDataField< ::capnp::Void>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, value);
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isBoolean() const {
|
||||
return which() == JsonValue::BOOLEAN;
|
||||
}
|
||||
inline bool JsonValue::Builder::isBoolean() {
|
||||
return which() == JsonValue::BOOLEAN;
|
||||
}
|
||||
inline bool JsonValue::Reader::getBoolean() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::BOOLEAN),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return _reader.getDataField<bool>(
|
||||
::capnp::bounded<16>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
|
||||
inline bool JsonValue::Builder::getBoolean() {
|
||||
KJ_IREQUIRE((which() == JsonValue::BOOLEAN),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return _builder.getDataField<bool>(
|
||||
::capnp::bounded<16>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
inline void JsonValue::Builder::setBoolean(bool value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::BOOLEAN);
|
||||
_builder.setDataField<bool>(
|
||||
::capnp::bounded<16>() * ::capnp::ELEMENTS, value);
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isNumber() const {
|
||||
return which() == JsonValue::NUMBER;
|
||||
}
|
||||
inline bool JsonValue::Builder::isNumber() {
|
||||
return which() == JsonValue::NUMBER;
|
||||
}
|
||||
inline double JsonValue::Reader::getNumber() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::NUMBER),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return _reader.getDataField<double>(
|
||||
::capnp::bounded<1>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
|
||||
inline double JsonValue::Builder::getNumber() {
|
||||
KJ_IREQUIRE((which() == JsonValue::NUMBER),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return _builder.getDataField<double>(
|
||||
::capnp::bounded<1>() * ::capnp::ELEMENTS);
|
||||
}
|
||||
inline void JsonValue::Builder::setNumber(double value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::NUMBER);
|
||||
_builder.setDataField<double>(
|
||||
::capnp::bounded<1>() * ::capnp::ELEMENTS, value);
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isString() const {
|
||||
return which() == JsonValue::STRING;
|
||||
}
|
||||
inline bool JsonValue::Builder::isString() {
|
||||
return which() == JsonValue::STRING;
|
||||
}
|
||||
inline bool JsonValue::Reader::hasString() const {
|
||||
if (which() != JsonValue::STRING) return false;
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Builder::hasString() {
|
||||
if (which() != JsonValue::STRING) return false;
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::Text::Reader JsonValue::Reader::getString() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::STRING),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::Text::Builder JsonValue::Builder::getString() {
|
||||
KJ_IREQUIRE((which() == JsonValue::STRING),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Builder::setString( ::capnp::Text::Reader value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::STRING);
|
||||
::capnp::_::PointerHelpers< ::capnp::Text>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::Text::Builder JsonValue::Builder::initString(unsigned int size) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::STRING);
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void JsonValue::Builder::adoptString(
|
||||
::capnp::Orphan< ::capnp::Text>&& value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::STRING);
|
||||
::capnp::_::PointerHelpers< ::capnp::Text>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::Text> JsonValue::Builder::disownString() {
|
||||
KJ_IREQUIRE((which() == JsonValue::STRING),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isArray() const {
|
||||
return which() == JsonValue::ARRAY;
|
||||
}
|
||||
inline bool JsonValue::Builder::isArray() {
|
||||
return which() == JsonValue::ARRAY;
|
||||
}
|
||||
inline bool JsonValue::Reader::hasArray() const {
|
||||
if (which() != JsonValue::ARRAY) return false;
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Builder::hasArray() {
|
||||
if (which() != JsonValue::ARRAY) return false;
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Reader JsonValue::Reader::getArray() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::ARRAY),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder JsonValue::Builder::getArray() {
|
||||
KJ_IREQUIRE((which() == JsonValue::ARRAY),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Builder::setArray( ::capnp::List< ::capnp::JsonValue>::Reader value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::ARRAY);
|
||||
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder JsonValue::Builder::initArray(unsigned int size) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::ARRAY);
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void JsonValue::Builder::adoptArray(
|
||||
::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>>&& value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::ARRAY);
|
||||
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>> JsonValue::Builder::disownArray() {
|
||||
KJ_IREQUIRE((which() == JsonValue::ARRAY),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isObject() const {
|
||||
return which() == JsonValue::OBJECT;
|
||||
}
|
||||
inline bool JsonValue::Builder::isObject() {
|
||||
return which() == JsonValue::OBJECT;
|
||||
}
|
||||
inline bool JsonValue::Reader::hasObject() const {
|
||||
if (which() != JsonValue::OBJECT) return false;
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Builder::hasObject() {
|
||||
if (which() != JsonValue::OBJECT) return false;
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue::Field>::Reader JsonValue::Reader::getObject() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::OBJECT),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue::Field>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue::Field>::Builder JsonValue::Builder::getObject() {
|
||||
KJ_IREQUIRE((which() == JsonValue::OBJECT),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue::Field>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Builder::setObject( ::capnp::List< ::capnp::JsonValue::Field>::Reader value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::OBJECT);
|
||||
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue::Field>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue::Field>::Builder JsonValue::Builder::initObject(unsigned int size) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::OBJECT);
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue::Field>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void JsonValue::Builder::adoptObject(
|
||||
::capnp::Orphan< ::capnp::List< ::capnp::JsonValue::Field>>&& value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::OBJECT);
|
||||
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue::Field>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List< ::capnp::JsonValue::Field>> JsonValue::Builder::disownObject() {
|
||||
KJ_IREQUIRE((which() == JsonValue::OBJECT),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue::Field>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Reader::isCall() const {
|
||||
return which() == JsonValue::CALL;
|
||||
}
|
||||
inline bool JsonValue::Builder::isCall() {
|
||||
return which() == JsonValue::CALL;
|
||||
}
|
||||
inline bool JsonValue::Reader::hasCall() const {
|
||||
if (which() != JsonValue::CALL) return false;
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Builder::hasCall() {
|
||||
if (which() != JsonValue::CALL) return false;
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::JsonValue::Call::Reader JsonValue::Reader::getCall() const {
|
||||
KJ_IREQUIRE((which() == JsonValue::CALL),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue::Call>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::JsonValue::Call::Builder JsonValue::Builder::getCall() {
|
||||
KJ_IREQUIRE((which() == JsonValue::CALL),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue::Call>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Builder::setCall( ::capnp::JsonValue::Call::Reader value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::CALL);
|
||||
::capnp::_::PointerHelpers< ::capnp::JsonValue::Call>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::JsonValue::Call::Builder JsonValue::Builder::initCall() {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::CALL);
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue::Call>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Builder::adoptCall(
|
||||
::capnp::Orphan< ::capnp::JsonValue::Call>&& value) {
|
||||
_builder.setDataField<JsonValue::Which>(
|
||||
::capnp::bounded<0>() * ::capnp::ELEMENTS, JsonValue::CALL);
|
||||
::capnp::_::PointerHelpers< ::capnp::JsonValue::Call>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::JsonValue::Call> JsonValue::Builder::disownCall() {
|
||||
KJ_IREQUIRE((which() == JsonValue::CALL),
|
||||
"Must check which() before get()ing a union member.");
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue::Call>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Field::Reader::hasName() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Field::Builder::hasName() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::Text::Reader JsonValue::Field::Reader::getName() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::Text::Builder JsonValue::Field::Builder::getName() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Field::Builder::setName( ::capnp::Text::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::Text>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::Text::Builder JsonValue::Field::Builder::initName(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void JsonValue::Field::Builder::adoptName(
|
||||
::capnp::Orphan< ::capnp::Text>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::Text>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::Text> JsonValue::Field::Builder::disownName() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Field::Reader::hasValue() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Field::Builder::hasValue() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::JsonValue::Reader JsonValue::Field::Reader::getValue() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue>::get(_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::JsonValue::Builder JsonValue::Field::Builder::getValue() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue>::get(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
#if !CAPNP_LITE
|
||||
inline ::capnp::JsonValue::Pipeline JsonValue::Field::Pipeline::getValue() {
|
||||
return ::capnp::JsonValue::Pipeline(_typeless.getPointerField(1));
|
||||
}
|
||||
#endif // !CAPNP_LITE
|
||||
inline void JsonValue::Field::Builder::setValue( ::capnp::JsonValue::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::JsonValue>::set(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::JsonValue::Builder JsonValue::Field::Builder::initValue() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue>::init(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Field::Builder::adoptValue(
|
||||
::capnp::Orphan< ::capnp::JsonValue>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::JsonValue>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::JsonValue> JsonValue::Field::Builder::disownValue() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::JsonValue>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Call::Reader::hasFunction() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Call::Builder::hasFunction() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::Text::Reader JsonValue::Call::Reader::getFunction() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_reader.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::Text::Builder JsonValue::Call::Builder::getFunction() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Call::Builder::setFunction( ::capnp::Text::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::Text>::set(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::Text::Builder JsonValue::Call::Builder::initFunction(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::init(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void JsonValue::Call::Builder::adoptFunction(
|
||||
::capnp::Orphan< ::capnp::Text>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::Text>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::Text> JsonValue::Call::Builder::disownFunction() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::Text>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<0>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
inline bool JsonValue::Call::Reader::hasParams() const {
|
||||
return !_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline bool JsonValue::Call::Builder::hasParams() {
|
||||
return !_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Reader JsonValue::Call::Reader::getParams() const {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::get(_reader.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder JsonValue::Call::Builder::getParams() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::get(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
inline void JsonValue::Call::Builder::setParams( ::capnp::List< ::capnp::JsonValue>::Reader value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::set(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), value);
|
||||
}
|
||||
inline ::capnp::List< ::capnp::JsonValue>::Builder JsonValue::Call::Builder::initParams(unsigned int size) {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::init(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), size);
|
||||
}
|
||||
inline void JsonValue::Call::Builder::adoptParams(
|
||||
::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>>&& value) {
|
||||
::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::adopt(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS), kj::mv(value));
|
||||
}
|
||||
inline ::capnp::Orphan< ::capnp::List< ::capnp::JsonValue>> JsonValue::Call::Builder::disownParams() {
|
||||
return ::capnp::_::PointerHelpers< ::capnp::List< ::capnp::JsonValue>>::disown(_builder.getPointerField(
|
||||
::capnp::bounded<1>() * ::capnp::POINTERS));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
#endif // CAPNP_INCLUDED_8ef99297a43a5e34_
|
||||
462
phonelibs/capnp-cpp/mac/include/capnp/compat/json.h
Normal file
462
phonelibs/capnp-cpp/mac/include/capnp/compat/json.h
Normal file
@@ -0,0 +1,462 @@
|
||||
// Copyright (c) 2015 Sandstorm Development Group, Inc. and contributors
|
||||
// Licensed under the MIT License:
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#ifndef CAPNP_COMPAT_JSON_H_
|
||||
#define CAPNP_COMPAT_JSON_H_
|
||||
|
||||
#include <capnp/schema.h>
|
||||
#include <capnp/dynamic.h>
|
||||
#include <capnp/compat/json.capnp.h>
|
||||
|
||||
namespace capnp {
|
||||
|
||||
class JsonCodec {
|
||||
// Flexible class for encoding Cap'n Proto types as JSON, and decoding JSON back to Cap'n Proto.
|
||||
//
|
||||
// Typical usage:
|
||||
//
|
||||
// JsonCodec json;
|
||||
//
|
||||
// // encode
|
||||
// kj::String encoded = json.encode(someStructReader);
|
||||
//
|
||||
// // decode
|
||||
// json.decode(encoded, someStructBuilder);
|
||||
//
|
||||
// Advanced users can do fancy things like override the way certain types or fields are
|
||||
// represented in JSON by registering handlers. See the unit test for an example.
|
||||
//
|
||||
// Notes:
|
||||
// - When encoding, all primitive fields are always encoded, even if default-valued. Pointer
|
||||
// fields are only encoded if they are non-null.
|
||||
// - 64-bit integers are encoded as strings, since JSON "numbers" are double-precision floating
|
||||
// points which cannot store a 64-bit integer without losing data.
|
||||
// - NaNs and infinite floating point numbers are not allowed by the JSON spec, and so are encoded
|
||||
// as null. This matches the behavior of `JSON.stringify` in at least Firefox and Chrome.
|
||||
// - Data is encoded as an array of numbers in the range [0,255]. You probably want to register
|
||||
// a handler that does something better, like maybe base64 encoding, but there are a zillion
|
||||
// different ways people do this.
|
||||
// - Encoding/decoding capabilities and AnyPointers requires registering a Handler, since there's
|
||||
// no obvious default behavior.
|
||||
// - When decoding, unrecognized field names are ignored. Note: This means that JSON is NOT a
|
||||
// good format for receiving input from a human. Consider `capnp eval` or the SchemaParser
|
||||
// library for human input.
|
||||
|
||||
public:
|
||||
JsonCodec();
|
||||
~JsonCodec() noexcept(false);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// standard API
|
||||
|
||||
void setPrettyPrint(bool enabled);
|
||||
// Enable to insert newlines, indentation, and other extra spacing into the output. The default
|
||||
// is to use minimal whitespace.
|
||||
|
||||
void setMaxNestingDepth(size_t maxNestingDepth);
|
||||
// Set maximum nesting depth when decoding JSON to prevent highly nested input from overflowing
|
||||
// the call stack. The default is 64.
|
||||
|
||||
template <typename T>
|
||||
kj::String encode(T&& value);
|
||||
// Encode any Cap'n Proto value to JSON, including primitives and
|
||||
// Dynamic{Enum,Struct,List,Capability}, but not DynamicValue (see below).
|
||||
|
||||
kj::String encode(DynamicValue::Reader value, Type type) const;
|
||||
// Encode a DynamicValue to JSON. `type` is needed because `DynamicValue` itself does
|
||||
// not distinguish between e.g. int32 and int64, which in JSON are handled differently. Most
|
||||
// of the time, though, you can use the single-argument templated version of `encode()` instead.
|
||||
|
||||
void decode(kj::ArrayPtr<const char> input, DynamicStruct::Builder output) const;
|
||||
// Decode JSON text directly into a struct builder. This only works for structs since lists
|
||||
// need to be allocated with the correct size in advance.
|
||||
//
|
||||
// (Remember that any Cap'n Proto struct reader type can be implicitly cast to
|
||||
// DynamicStruct::Reader.)
|
||||
|
||||
template <typename T>
|
||||
Orphan<T> decode(kj::ArrayPtr<const char> input, Orphanage orphanage) const;
|
||||
// Decode JSON text to any Cap'n Proto object (pointer value), allocated using the given
|
||||
// orphanage. T must be specified explicitly and cannot be dynamic, e.g.:
|
||||
//
|
||||
// Orphan<MyType> orphan = json.decode<MyType>(text, orphanage);
|
||||
|
||||
template <typename T>
|
||||
ReaderFor<T> decode(kj::ArrayPtr<const char> input) const;
|
||||
// Decode JSON text into a primitive or capability value. T must be specified explicitly and
|
||||
// cannot be dynamic, e.g.:
|
||||
//
|
||||
// uint32_t n = json.decode<uint32_t>(text);
|
||||
|
||||
Orphan<DynamicValue> decode(kj::ArrayPtr<const char> input, Type type, Orphanage orphanage) const;
|
||||
Orphan<DynamicList> decode(
|
||||
kj::ArrayPtr<const char> input, ListSchema type, Orphanage orphanage) const;
|
||||
Orphan<DynamicStruct> decode(
|
||||
kj::ArrayPtr<const char> input, StructSchema type, Orphanage orphanage) const;
|
||||
DynamicCapability::Client decode(kj::ArrayPtr<const char> input, InterfaceSchema type) const;
|
||||
DynamicEnum decode(kj::ArrayPtr<const char> input, EnumSchema type) const;
|
||||
// Decode to a dynamic value, specifying the type schema.
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// layered API
|
||||
//
|
||||
// You can separate text <-> JsonValue from JsonValue <-> T. These are particularly useful
|
||||
// for calling from Handler implementations.
|
||||
|
||||
kj::String encodeRaw(JsonValue::Reader value) const;
|
||||
void decodeRaw(kj::ArrayPtr<const char> input, JsonValue::Builder output) const;
|
||||
// Translate JsonValue <-> text.
|
||||
|
||||
template <typename T>
|
||||
void encode(T&& value, JsonValue::Builder output);
|
||||
void encode(DynamicValue::Reader input, Type type, JsonValue::Builder output) const;
|
||||
void decode(JsonValue::Reader input, DynamicStruct::Builder output) const;
|
||||
template <typename T>
|
||||
Orphan<T> decode(JsonValue::Reader input, Orphanage orphanage) const;
|
||||
template <typename T>
|
||||
ReaderFor<T> decode(JsonValue::Reader input) const;
|
||||
|
||||
Orphan<DynamicValue> decode(JsonValue::Reader input, Type type, Orphanage orphanage) const;
|
||||
Orphan<DynamicList> decode(JsonValue::Reader input, ListSchema type, Orphanage orphanage) const;
|
||||
Orphan<DynamicStruct> decode(
|
||||
JsonValue::Reader input, StructSchema type, Orphanage orphanage) const;
|
||||
DynamicCapability::Client decode(JsonValue::Reader input, InterfaceSchema type) const;
|
||||
DynamicEnum decode(JsonValue::Reader input, EnumSchema type) const;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// specializing particular types
|
||||
|
||||
template <typename T, Style s = style<T>()>
|
||||
class Handler;
|
||||
// Implement this interface to specify a special encoding for a particular type or field.
|
||||
//
|
||||
// The templates are a bit ugly, but subclasses of this type essentially implement two methods,
|
||||
// one to encode values of this type and one to decode values of this type. `encode()` is simple:
|
||||
//
|
||||
// void encode(const JsonCodec& codec, ReaderFor<T> input, JsonValue::Builder output) const;
|
||||
//
|
||||
// `decode()` is a bit trickier. When T is a struct (including DynamicStruct), it is:
|
||||
//
|
||||
// void decode(const JsonCodec& codec, JsonValue::Reader input, BuilderFor<T> output) const;
|
||||
//
|
||||
// However, when T is a primitive, decode() is:
|
||||
//
|
||||
// T decode(const JsonCodec& codec, JsonValue::Reader input) const;
|
||||
//
|
||||
// Or when T is any non-struct object (list, blob), decode() is:
|
||||
//
|
||||
// Orphan<T> decode(const JsonCodec& codec, JsonValue::Reader input, Orphanage orphanage) const;
|
||||
//
|
||||
// Or when T is an interface:
|
||||
//
|
||||
// T::Client decode(const JsonCodec& codec, JsonValue::Reader input) const;
|
||||
//
|
||||
// Additionally, when T is a struct you can *optionally* also implement the orphan-returning form
|
||||
// of decode(), but it will only be called when the struct would be allocated as an individual
|
||||
// object, not as part of a list. This allows you to return "nullptr" in these cases to say that
|
||||
// the pointer value should be null. This does not apply to list elements because struct list
|
||||
// elements cannot ever be null (since Cap'n Proto encodes struct lists as a flat list rather
|
||||
// than list-of-pointers).
|
||||
|
||||
template <typename T>
|
||||
void addTypeHandler(Handler<T>& handler);
|
||||
void addTypeHandler(Type type, Handler<DynamicValue>& handler);
|
||||
void addTypeHandler(EnumSchema type, Handler<DynamicEnum>& handler);
|
||||
void addTypeHandler(StructSchema type, Handler<DynamicStruct>& handler);
|
||||
void addTypeHandler(ListSchema type, Handler<DynamicList>& handler);
|
||||
void addTypeHandler(InterfaceSchema type, Handler<DynamicCapability>& handler);
|
||||
// Arrange that whenever the type T appears in the message, your handler will be used to
|
||||
// encode/decode it.
|
||||
//
|
||||
// Note that if you register a handler for a capability type, it will also apply to subtypes.
|
||||
// Thus Handler<Capability> handles all capabilities.
|
||||
|
||||
template <typename T>
|
||||
void addFieldHandler(StructSchema::Field field, Handler<T>& handler);
|
||||
// Matches only the specific field. T can be a dynamic type. T must match the field's type.
|
||||
|
||||
private:
|
||||
class HandlerBase;
|
||||
struct Impl;
|
||||
|
||||
kj::Own<Impl> impl;
|
||||
|
||||
void encodeField(StructSchema::Field field, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const;
|
||||
void decodeArray(List<JsonValue>::Reader input, DynamicList::Builder output) const;
|
||||
void decodeObject(List<JsonValue::Field>::Reader input, DynamicStruct::Builder output) const;
|
||||
void addTypeHandlerImpl(Type type, HandlerBase& handler);
|
||||
void addFieldHandlerImpl(StructSchema::Field field, Type type, HandlerBase& handler);
|
||||
};
|
||||
|
||||
// =======================================================================================
|
||||
// inline implementation details
|
||||
|
||||
template <typename T>
|
||||
kj::String JsonCodec::encode(T&& value) {
|
||||
typedef FromAny<kj::Decay<T>> Base;
|
||||
return encode(DynamicValue::Reader(ReaderFor<Base>(kj::fwd<T>(value))), Type::from<Base>());
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline Orphan<T> JsonCodec::decode(kj::ArrayPtr<const char> input, Orphanage orphanage) const {
|
||||
return decode(input, Type::from<T>(), orphanage).template releaseAs<T>();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline ReaderFor<T> JsonCodec::decode(kj::ArrayPtr<const char> input) const {
|
||||
static_assert(style<T>() == Style::PRIMITIVE || style<T>() == Style::CAPABILITY,
|
||||
"must specify an orphanage to decode an object type");
|
||||
return decode(input, Type::from<T>(), Orphanage()).getReader().template as<T>();
|
||||
}
|
||||
|
||||
inline Orphan<DynamicList> JsonCodec::decode(
|
||||
kj::ArrayPtr<const char> input, ListSchema type, Orphanage orphanage) const {
|
||||
return decode(input, Type(type), orphanage).releaseAs<DynamicList>();
|
||||
}
|
||||
inline Orphan<DynamicStruct> JsonCodec::decode(
|
||||
kj::ArrayPtr<const char> input, StructSchema type, Orphanage orphanage) const {
|
||||
return decode(input, Type(type), orphanage).releaseAs<DynamicStruct>();
|
||||
}
|
||||
inline DynamicCapability::Client JsonCodec::decode(
|
||||
kj::ArrayPtr<const char> input, InterfaceSchema type) const {
|
||||
return decode(input, Type(type), Orphanage()).getReader().as<DynamicCapability>();
|
||||
}
|
||||
inline DynamicEnum JsonCodec::decode(kj::ArrayPtr<const char> input, EnumSchema type) const {
|
||||
return decode(input, Type(type), Orphanage()).getReader().as<DynamicEnum>();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
template <typename T>
|
||||
void JsonCodec::encode(T&& value, JsonValue::Builder output) {
|
||||
typedef FromAny<kj::Decay<T>> Base;
|
||||
encode(DynamicValue::Reader(ReaderFor<Base>(kj::fwd<T>(value))), Type::from<Base>(), output);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline Orphan<T> JsonCodec::decode(JsonValue::Reader input, Orphanage orphanage) const {
|
||||
return decode(input, Type::from<T>(), orphanage).template releaseAs<T>();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline ReaderFor<T> JsonCodec::decode(JsonValue::Reader input) const {
|
||||
static_assert(style<T>() == Style::PRIMITIVE || style<T>() == Style::CAPABILITY,
|
||||
"must specify an orphanage to decode an object type");
|
||||
return decode(input, Type::from<T>(), Orphanage()).getReader().template as<T>();
|
||||
}
|
||||
|
||||
inline Orphan<DynamicList> JsonCodec::decode(
|
||||
JsonValue::Reader input, ListSchema type, Orphanage orphanage) const {
|
||||
return decode(input, Type(type), orphanage).releaseAs<DynamicList>();
|
||||
}
|
||||
inline Orphan<DynamicStruct> JsonCodec::decode(
|
||||
JsonValue::Reader input, StructSchema type, Orphanage orphanage) const {
|
||||
return decode(input, Type(type), orphanage).releaseAs<DynamicStruct>();
|
||||
}
|
||||
inline DynamicCapability::Client JsonCodec::decode(
|
||||
JsonValue::Reader input, InterfaceSchema type) const {
|
||||
return decode(input, Type(type), Orphanage()).getReader().as<DynamicCapability>();
|
||||
}
|
||||
inline DynamicEnum JsonCodec::decode(JsonValue::Reader input, EnumSchema type) const {
|
||||
return decode(input, Type(type), Orphanage()).getReader().as<DynamicEnum>();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
class JsonCodec::HandlerBase {
|
||||
// Internal helper; ignore.
|
||||
public:
|
||||
virtual void encodeBase(const JsonCodec& codec, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const = 0;
|
||||
virtual Orphan<DynamicValue> decodeBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Type type, Orphanage orphanage) const;
|
||||
virtual void decodeStructBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
DynamicStruct::Builder output) const;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class JsonCodec::Handler<T, Style::POINTER>: private JsonCodec::HandlerBase {
|
||||
public:
|
||||
virtual void encode(const JsonCodec& codec, ReaderFor<T> input,
|
||||
JsonValue::Builder output) const = 0;
|
||||
virtual Orphan<T> decode(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Orphanage orphanage) const = 0;
|
||||
|
||||
private:
|
||||
void encodeBase(const JsonCodec& codec, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const override final {
|
||||
encode(codec, input.as<T>(), output);
|
||||
}
|
||||
Orphan<DynamicValue> decodeBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Type type, Orphanage orphanage) const override final {
|
||||
return decode(codec, input, orphanage);
|
||||
}
|
||||
friend class JsonCodec;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class JsonCodec::Handler<T, Style::STRUCT>: private JsonCodec::HandlerBase {
|
||||
public:
|
||||
virtual void encode(const JsonCodec& codec, ReaderFor<T> input,
|
||||
JsonValue::Builder output) const = 0;
|
||||
virtual void decode(const JsonCodec& codec, JsonValue::Reader input,
|
||||
BuilderFor<T> output) const = 0;
|
||||
virtual Orphan<T> decode(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Orphanage orphanage) const {
|
||||
// If subclass does not override, fall back to regular version.
|
||||
auto result = orphanage.newOrphan<T>();
|
||||
decode(codec, input, result.get());
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
void encodeBase(const JsonCodec& codec, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const override final {
|
||||
encode(codec, input.as<T>(), output);
|
||||
}
|
||||
Orphan<DynamicValue> decodeBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Type type, Orphanage orphanage) const override final {
|
||||
return decode(codec, input, orphanage);
|
||||
}
|
||||
void decodeStructBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
DynamicStruct::Builder output) const override final {
|
||||
decode(codec, input, output.as<T>());
|
||||
}
|
||||
friend class JsonCodec;
|
||||
};
|
||||
|
||||
template <>
|
||||
class JsonCodec::Handler<DynamicStruct>: private JsonCodec::HandlerBase {
|
||||
// Almost identical to Style::STRUCT except that we pass the struct type to decode().
|
||||
|
||||
public:
|
||||
virtual void encode(const JsonCodec& codec, DynamicStruct::Reader input,
|
||||
JsonValue::Builder output) const = 0;
|
||||
virtual void decode(const JsonCodec& codec, JsonValue::Reader input,
|
||||
DynamicStruct::Builder output) const = 0;
|
||||
virtual Orphan<DynamicStruct> decode(const JsonCodec& codec, JsonValue::Reader input,
|
||||
StructSchema type, Orphanage orphanage) const {
|
||||
// If subclass does not override, fall back to regular version.
|
||||
auto result = orphanage.newOrphan(type);
|
||||
decode(codec, input, result.get());
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
void encodeBase(const JsonCodec& codec, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const override final {
|
||||
encode(codec, input.as<DynamicStruct>(), output);
|
||||
}
|
||||
Orphan<DynamicValue> decodeBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Type type, Orphanage orphanage) const override final {
|
||||
return decode(codec, input, type.asStruct(), orphanage);
|
||||
}
|
||||
void decodeStructBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
DynamicStruct::Builder output) const override final {
|
||||
decode(codec, input, output.as<DynamicStruct>());
|
||||
}
|
||||
friend class JsonCodec;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class JsonCodec::Handler<T, Style::PRIMITIVE>: private JsonCodec::HandlerBase {
|
||||
public:
|
||||
virtual void encode(const JsonCodec& codec, T input, JsonValue::Builder output) const = 0;
|
||||
virtual T decode(const JsonCodec& codec, JsonValue::Reader input) const = 0;
|
||||
|
||||
private:
|
||||
void encodeBase(const JsonCodec& codec, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const override final {
|
||||
encode(codec, input.as<T>(), output);
|
||||
}
|
||||
Orphan<DynamicValue> decodeBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Type type, Orphanage orphanage) const override final {
|
||||
return decode(codec, input);
|
||||
}
|
||||
friend class JsonCodec;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class JsonCodec::Handler<T, Style::CAPABILITY>: private JsonCodec::HandlerBase {
|
||||
public:
|
||||
virtual void encode(const JsonCodec& codec, typename T::Client input,
|
||||
JsonValue::Builder output) const = 0;
|
||||
virtual typename T::Client decode(const JsonCodec& codec, JsonValue::Reader input) const = 0;
|
||||
|
||||
private:
|
||||
void encodeBase(const JsonCodec& codec, DynamicValue::Reader input,
|
||||
JsonValue::Builder output) const override final {
|
||||
encode(codec, input.as<T>(), output);
|
||||
}
|
||||
Orphan<DynamicValue> decodeBase(const JsonCodec& codec, JsonValue::Reader input,
|
||||
Type type, Orphanage orphanage) const override final {
|
||||
return orphanage.newOrphanCopy(decode(codec, input));
|
||||
}
|
||||
friend class JsonCodec;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
inline void JsonCodec::addTypeHandler(Handler<T>& handler) {
|
||||
addTypeHandlerImpl(Type::from<T>(), handler);
|
||||
}
|
||||
inline void JsonCodec::addTypeHandler(Type type, Handler<DynamicValue>& handler) {
|
||||
addTypeHandlerImpl(type, handler);
|
||||
}
|
||||
inline void JsonCodec::addTypeHandler(EnumSchema type, Handler<DynamicEnum>& handler) {
|
||||
addTypeHandlerImpl(type, handler);
|
||||
}
|
||||
inline void JsonCodec::addTypeHandler(StructSchema type, Handler<DynamicStruct>& handler) {
|
||||
addTypeHandlerImpl(type, handler);
|
||||
}
|
||||
inline void JsonCodec::addTypeHandler(ListSchema type, Handler<DynamicList>& handler) {
|
||||
addTypeHandlerImpl(type, handler);
|
||||
}
|
||||
inline void JsonCodec::addTypeHandler(InterfaceSchema type, Handler<DynamicCapability>& handler) {
|
||||
addTypeHandlerImpl(type, handler);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline void JsonCodec::addFieldHandler(StructSchema::Field field, Handler<T>& handler) {
|
||||
addFieldHandlerImpl(field, Type::from<T>(), handler);
|
||||
}
|
||||
|
||||
template <> void JsonCodec::addTypeHandler(Handler<DynamicValue>& handler)
|
||||
KJ_UNAVAILABLE("JSON handlers for type sets (e.g. all structs, all lists) not implemented; "
|
||||
"try specifying a specific type schema as the first parameter");
|
||||
template <> void JsonCodec::addTypeHandler(Handler<DynamicEnum>& handler)
|
||||
KJ_UNAVAILABLE("JSON handlers for type sets (e.g. all structs, all lists) not implemented; "
|
||||
"try specifying a specific type schema as the first parameter");
|
||||
template <> void JsonCodec::addTypeHandler(Handler<DynamicStruct>& handler)
|
||||
KJ_UNAVAILABLE("JSON handlers for type sets (e.g. all structs, all lists) not implemented; "
|
||||
"try specifying a specific type schema as the first parameter");
|
||||
template <> void JsonCodec::addTypeHandler(Handler<DynamicList>& handler)
|
||||
KJ_UNAVAILABLE("JSON handlers for type sets (e.g. all structs, all lists) not implemented; "
|
||||
"try specifying a specific type schema as the first parameter");
|
||||
template <> void JsonCodec::addTypeHandler(Handler<DynamicCapability>& handler)
|
||||
KJ_UNAVAILABLE("JSON handlers for type sets (e.g. all structs, all lists) not implemented; "
|
||||
"try specifying a specific type schema as the first parameter");
|
||||
// TODO(someday): Implement support for registering handlers that cover thinsg like "all structs"
|
||||
// or "all lists". Currently you can only target a specific struct or list type.
|
||||
|
||||
} // namespace capnp
|
||||
|
||||
#endif // CAPNP_COMPAT_JSON_H_
|
||||
Reference in New Issue
Block a user