annotate osx/include/capnp/serialize-text.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 0994c39f1e94
children
rev   line source
cannam@62 1 // Copyright (c) 2015 Philip Quinn.
cannam@62 2 // Licensed under the MIT License:
cannam@62 3 //
cannam@62 4 // Permission is hereby granted, free of charge, to any person obtaining a copy
cannam@62 5 // of this software and associated documentation files (the "Software"), to deal
cannam@62 6 // in the Software without restriction, including without limitation the rights
cannam@62 7 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
cannam@62 8 // copies of the Software, and to permit persons to whom the Software is
cannam@62 9 // furnished to do so, subject to the following conditions:
cannam@62 10 //
cannam@62 11 // The above copyright notice and this permission notice shall be included in
cannam@62 12 // all copies or substantial portions of the Software.
cannam@62 13 //
cannam@62 14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
cannam@62 15 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
cannam@62 16 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
cannam@62 17 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
cannam@62 18 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
cannam@62 19 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
cannam@62 20 // THE SOFTWARE.
cannam@62 21
cannam@62 22 #ifndef CAPNP_SERIALIZE_TEXT_H_
cannam@62 23 #define CAPNP_SERIALIZE_TEXT_H_
cannam@62 24
cannam@62 25 #if defined(__GNUC__) && !defined(CAPNP_HEADER_WARNINGS)
cannam@62 26 #pragma GCC system_header
cannam@62 27 #endif
cannam@62 28
cannam@62 29 #include <kj/string.h>
cannam@62 30 #include "dynamic.h"
cannam@62 31 #include "orphan.h"
cannam@62 32 #include "schema.h"
cannam@62 33
cannam@62 34 namespace capnp {
cannam@62 35
cannam@62 36 class TextCodec {
cannam@62 37 // Reads and writes Cap'n Proto objects in a plain text format (as used in the schema
cannam@62 38 // language for constants, and read/written by the 'decode' and 'encode' commands of
cannam@62 39 // the capnp tool).
cannam@62 40 //
cannam@62 41 // This format is useful for debugging or human input, but it is not a robust alternative
cannam@62 42 // to the binary format. Changes to a schema's types or names that are permitted in a
cannam@62 43 // schema's binary evolution will likely break messages stored in this format.
cannam@62 44 //
cannam@62 45 // Note that definitions or references (to constants, other fields, or files) are not
cannam@62 46 // permitted in this format. To evaluate declarations with the full expressiveness of the
cannam@62 47 // schema language, see `capnp::SchemaParser`.
cannam@62 48 //
cannam@62 49 // Requires linking with the capnpc library.
cannam@62 50
cannam@62 51 public:
cannam@62 52 TextCodec();
cannam@62 53 ~TextCodec() noexcept(true);
cannam@62 54
cannam@62 55 void setPrettyPrint(bool enabled);
cannam@62 56 // If enabled, pads the output of `encode()` with spaces and newlines to make it more
cannam@62 57 // human-readable.
cannam@62 58
cannam@62 59 template <typename T>
cannam@62 60 kj::String encode(T&& value) const;
cannam@62 61 kj::String encode(DynamicValue::Reader value) const;
cannam@62 62 // Encode any Cap'n Proto value.
cannam@62 63
cannam@62 64 template <typename T>
cannam@62 65 Orphan<T> decode(kj::StringPtr input, Orphanage orphanage) const;
cannam@62 66 // Decode a text message into a Cap'n Proto object of type T, allocated in the given
cannam@62 67 // orphanage. Any errors parsing the input or assigning the fields of T are thrown as
cannam@62 68 // exceptions.
cannam@62 69
cannam@62 70 void decode(kj::StringPtr input, DynamicStruct::Builder output) const;
cannam@62 71 // Decode a text message for a struct into the given builder. Any errors parsing the
cannam@62 72 // input or assigning the fields of the output are thrown as exceptions.
cannam@62 73
cannam@62 74 // TODO(someday): expose some control over the error handling?
cannam@62 75 private:
cannam@62 76 Orphan<DynamicValue> decode(kj::StringPtr input, Type type, Orphanage orphanage) const;
cannam@62 77
cannam@62 78 bool prettyPrint;
cannam@62 79 };
cannam@62 80
cannam@62 81 // =======================================================================================
cannam@62 82 // inline stuff
cannam@62 83
cannam@62 84 template <typename T>
cannam@62 85 inline kj::String TextCodec::encode(T&& value) const {
cannam@62 86 return encode(DynamicValue::Reader(ReaderFor<FromAny<T>>(kj::fwd<T>(value))));
cannam@62 87 }
cannam@62 88
cannam@62 89 template <typename T>
cannam@62 90 inline Orphan<T> TextCodec::decode(kj::StringPtr input, Orphanage orphanage) const {
cannam@62 91 return decode(input, Type::from<T>(), orphanage).template releaseAs<T>();
cannam@62 92 }
cannam@62 93
cannam@62 94 } // namespace capnp
cannam@62 95
cannam@62 96 #endif // CAPNP_SERIALIZE_TEXT_H_