| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "status.h" |
| |
| namespace crdtp { |
| // ============================================================================= |
| // Status and Error codes |
| // ============================================================================= |
| |
| std::string Status::ToASCIIString() const { |
| switch (error) { |
| case Error::OK: |
| return "OK"; |
| case Error::JSON_PARSER_UNPROCESSED_INPUT_REMAINS: |
| return ToASCIIString("JSON: unprocessed input remains"); |
| case Error::JSON_PARSER_STACK_LIMIT_EXCEEDED: |
| return ToASCIIString("JSON: stack limit exceeded"); |
| case Error::JSON_PARSER_NO_INPUT: |
| return ToASCIIString("JSON: no input"); |
| case Error::JSON_PARSER_INVALID_TOKEN: |
| return ToASCIIString("JSON: invalid token"); |
| case Error::JSON_PARSER_INVALID_NUMBER: |
| return ToASCIIString("JSON: invalid number"); |
| case Error::JSON_PARSER_INVALID_STRING: |
| return ToASCIIString("JSON: invalid string"); |
| case Error::JSON_PARSER_UNEXPECTED_ARRAY_END: |
| return ToASCIIString("JSON: unexpected array end"); |
| case Error::JSON_PARSER_COMMA_OR_ARRAY_END_EXPECTED: |
| return ToASCIIString("JSON: comma or array end expected"); |
| case Error::JSON_PARSER_STRING_LITERAL_EXPECTED: |
| return ToASCIIString("JSON: string literal expected"); |
| case Error::JSON_PARSER_COLON_EXPECTED: |
| return ToASCIIString("JSON: colon expected"); |
| case Error::JSON_PARSER_UNEXPECTED_MAP_END: |
| return ToASCIIString("JSON: unexpected map end"); |
| case Error::JSON_PARSER_COMMA_OR_MAP_END_EXPECTED: |
| return ToASCIIString("JSON: comma or map end expected"); |
| case Error::JSON_PARSER_VALUE_EXPECTED: |
| return ToASCIIString("JSON: value expected"); |
| |
| case Error::CBOR_INVALID_INT32: |
| return ToASCIIString("CBOR: invalid int32"); |
| case Error::CBOR_INVALID_DOUBLE: |
| return ToASCIIString("CBOR: invalid double"); |
| case Error::CBOR_INVALID_ENVELOPE: |
| return ToASCIIString("CBOR: invalid envelope"); |
| case Error::CBOR_ENVELOPE_CONTENTS_LENGTH_MISMATCH: |
| return ToASCIIString("CBOR: envelope contents length mismatch"); |
| case Error::CBOR_MAP_OR_ARRAY_EXPECTED_IN_ENVELOPE: |
| return ToASCIIString("CBOR: map or array expected in envelope"); |
| case Error::CBOR_INVALID_STRING8: |
| return ToASCIIString("CBOR: invalid string8"); |
| case Error::CBOR_INVALID_STRING16: |
| return ToASCIIString("CBOR: invalid string16"); |
| case Error::CBOR_INVALID_BINARY: |
| return ToASCIIString("CBOR: invalid binary"); |
| case Error::CBOR_UNSUPPORTED_VALUE: |
| return ToASCIIString("CBOR: unsupported value"); |
| case Error::CBOR_NO_INPUT: |
| return ToASCIIString("CBOR: no input"); |
| case Error::CBOR_INVALID_START_BYTE: |
| return ToASCIIString("CBOR: invalid start byte"); |
| case Error::CBOR_UNEXPECTED_EOF_EXPECTED_VALUE: |
| return ToASCIIString("CBOR: unexpected eof expected value"); |
| case Error::CBOR_UNEXPECTED_EOF_IN_ARRAY: |
| return ToASCIIString("CBOR: unexpected eof in array"); |
| case Error::CBOR_UNEXPECTED_EOF_IN_MAP: |
| return ToASCIIString("CBOR: unexpected eof in map"); |
| case Error::CBOR_INVALID_MAP_KEY: |
| return ToASCIIString("CBOR: invalid map key"); |
| case Error::CBOR_STACK_LIMIT_EXCEEDED: |
| return ToASCIIString("CBOR: stack limit exceeded"); |
| case Error::CBOR_TRAILING_JUNK: |
| return ToASCIIString("CBOR: trailing junk"); |
| case Error::CBOR_MAP_START_EXPECTED: |
| return ToASCIIString("CBOR: map start expected"); |
| case Error::CBOR_MAP_STOP_EXPECTED: |
| return ToASCIIString("CBOR: map stop expected"); |
| case Error::CBOR_ARRAY_START_EXPECTED: |
| return ToASCIIString("CBOR: array start expected"); |
| case Error::CBOR_ENVELOPE_SIZE_LIMIT_EXCEEDED: |
| return ToASCIIString("CBOR: envelope size limit exceeded"); |
| |
| case Error::BINDINGS_MANDATORY_FIELD_MISSING: |
| return ToASCIIString("BINDINGS: mandatory field missing"); |
| case Error::BINDINGS_BOOL_VALUE_EXPECTED: |
| return ToASCIIString("BINDINGS: bool value expected"); |
| case Error::BINDINGS_INT32_VALUE_EXPECTED: |
| return ToASCIIString("BINDINGS: int32 value expected"); |
| case Error::BINDINGS_DOUBLE_VALUE_EXPECTED: |
| return ToASCIIString("BINDINGS: double value expected"); |
| case Error::BINDINGS_STRING_VALUE_EXPECTED: |
| return ToASCIIString("BINDINGS: string value expected"); |
| case Error::BINDINGS_STRING8_VALUE_EXPECTED: |
| return ToASCIIString("BINDINGS: string8 value expected"); |
| case Error::BINDINGS_BINARY_VALUE_EXPECTED: |
| return ToASCIIString("BINDINGS: binary value expected"); |
| } |
| // Some compilers can't figure out that we can't get here. |
| return "INVALID ERROR CODE"; |
| } |
| |
| std::string Status::ToASCIIString(const char* msg) const { |
| return std::string(msg) + " at position " + std::to_string(pos); |
| } |
| } // namespace crdtp |