1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "status.h" 6 7 namespace v8_crdtp { 8 // ============================================================================= 9 // Status and Error codes 10 // ============================================================================= 11 Message() const12std::string Status::Message() const { 13 switch (error) { 14 case Error::OK: 15 return "OK"; 16 case Error::JSON_PARSER_UNPROCESSED_INPUT_REMAINS: 17 return "JSON: unprocessed input remains"; 18 case Error::JSON_PARSER_STACK_LIMIT_EXCEEDED: 19 return "JSON: stack limit exceeded"; 20 case Error::JSON_PARSER_NO_INPUT: 21 return "JSON: no input"; 22 case Error::JSON_PARSER_INVALID_TOKEN: 23 return "JSON: invalid token"; 24 case Error::JSON_PARSER_INVALID_NUMBER: 25 return "JSON: invalid number"; 26 case Error::JSON_PARSER_INVALID_STRING: 27 return "JSON: invalid string"; 28 case Error::JSON_PARSER_UNEXPECTED_ARRAY_END: 29 return "JSON: unexpected array end"; 30 case Error::JSON_PARSER_COMMA_OR_ARRAY_END_EXPECTED: 31 return "JSON: comma or array end expected"; 32 case Error::JSON_PARSER_STRING_LITERAL_EXPECTED: 33 return "JSON: string literal expected"; 34 case Error::JSON_PARSER_COLON_EXPECTED: 35 return "JSON: colon expected"; 36 case Error::JSON_PARSER_UNEXPECTED_MAP_END: 37 return "JSON: unexpected map end"; 38 case Error::JSON_PARSER_COMMA_OR_MAP_END_EXPECTED: 39 return "JSON: comma or map end expected"; 40 case Error::JSON_PARSER_VALUE_EXPECTED: 41 return "JSON: value expected"; 42 43 case Error::CBOR_INVALID_INT32: 44 return "CBOR: invalid int32"; 45 case Error::CBOR_INVALID_DOUBLE: 46 return "CBOR: invalid double"; 47 case Error::CBOR_INVALID_ENVELOPE: 48 return "CBOR: invalid envelope"; 49 case Error::CBOR_ENVELOPE_CONTENTS_LENGTH_MISMATCH: 50 return "CBOR: envelope contents length mismatch"; 51 case Error::CBOR_MAP_OR_ARRAY_EXPECTED_IN_ENVELOPE: 52 return "CBOR: map or array expected in envelope"; 53 case Error::CBOR_INVALID_STRING8: 54 return "CBOR: invalid string8"; 55 case Error::CBOR_INVALID_STRING16: 56 return "CBOR: invalid string16"; 57 case Error::CBOR_INVALID_BINARY: 58 return "CBOR: invalid binary"; 59 case Error::CBOR_UNSUPPORTED_VALUE: 60 return "CBOR: unsupported value"; 61 case Error::CBOR_NO_INPUT: 62 return "CBOR: no input"; 63 case Error::CBOR_INVALID_START_BYTE: 64 return "CBOR: invalid start byte"; 65 case Error::CBOR_UNEXPECTED_EOF_EXPECTED_VALUE: 66 return "CBOR: unexpected eof expected value"; 67 case Error::CBOR_UNEXPECTED_EOF_IN_ARRAY: 68 return "CBOR: unexpected eof in array"; 69 case Error::CBOR_UNEXPECTED_EOF_IN_MAP: 70 return "CBOR: unexpected eof in map"; 71 case Error::CBOR_INVALID_MAP_KEY: 72 return "CBOR: invalid map key"; 73 case Error::CBOR_DUPLICATE_MAP_KEY: 74 return "CBOR: duplicate map key"; 75 case Error::CBOR_STACK_LIMIT_EXCEEDED: 76 return "CBOR: stack limit exceeded"; 77 case Error::CBOR_TRAILING_JUNK: 78 return "CBOR: trailing junk"; 79 case Error::CBOR_MAP_START_EXPECTED: 80 return "CBOR: map start expected"; 81 case Error::CBOR_MAP_STOP_EXPECTED: 82 return "CBOR: map stop expected"; 83 case Error::CBOR_ARRAY_START_EXPECTED: 84 return "CBOR: array start expected"; 85 case Error::CBOR_ENVELOPE_SIZE_LIMIT_EXCEEDED: 86 return "CBOR: envelope size limit exceeded"; 87 88 case Error::MESSAGE_MUST_BE_AN_OBJECT: 89 return "Message must be an object"; 90 case Error::MESSAGE_MUST_HAVE_INTEGER_ID_PROPERTY: 91 return "Message must have integer 'id' property"; 92 case Error::MESSAGE_MUST_HAVE_STRING_METHOD_PROPERTY: 93 return "Message must have string 'method' property"; 94 case Error::MESSAGE_MAY_HAVE_STRING_SESSION_ID_PROPERTY: 95 return "Message may have string 'sessionId' property"; 96 case Error::MESSAGE_MAY_HAVE_OBJECT_PARAMS_PROPERTY: 97 return "Message may have object 'params' property"; 98 case Error::MESSAGE_HAS_UNKNOWN_PROPERTY: 99 return "Message has property other than " 100 "'id', 'method', 'sessionId', 'params'"; 101 102 case Error::BINDINGS_MANDATORY_FIELD_MISSING: 103 return "BINDINGS: mandatory field missing"; 104 case Error::BINDINGS_BOOL_VALUE_EXPECTED: 105 return "BINDINGS: bool value expected"; 106 case Error::BINDINGS_INT32_VALUE_EXPECTED: 107 return "BINDINGS: int32 value expected"; 108 case Error::BINDINGS_DOUBLE_VALUE_EXPECTED: 109 return "BINDINGS: double value expected"; 110 case Error::BINDINGS_STRING_VALUE_EXPECTED: 111 return "BINDINGS: string value expected"; 112 case Error::BINDINGS_STRING8_VALUE_EXPECTED: 113 return "BINDINGS: string8 value expected"; 114 case Error::BINDINGS_BINARY_VALUE_EXPECTED: 115 return "BINDINGS: binary value expected"; 116 case Error::BINDINGS_DICTIONARY_VALUE_EXPECTED: 117 return "BINDINGS: dictionary value expected"; 118 } 119 // Some compilers can't figure out that we can't get here. 120 return "INVALID ERROR CODE"; 121 } 122 ToASCIIString() const123std::string Status::ToASCIIString() const { 124 if (ok()) 125 return "OK"; 126 return Message() + " at position " + std::to_string(pos); 127 } 128 } // namespace v8_crdtp 129