status.cc 5.2 KB

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