summaryrefslogtreecommitdiff
path: root/sl4n/rapidjson/example/messagereader/messagereader.cpp
diff options
context:
space:
mode:
authorDavid Duarte <licorne@google.com>2023-02-14 00:58:53 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-02-14 00:58:53 +0000
commitfe8d01bb832962ecda95df428cf3271c2f5edd60 (patch)
tree51fe9cb4ad39cb6bed2709c40cc78bc213267f6e /sl4n/rapidjson/example/messagereader/messagereader.cpp
parentbc54b592e2c852eba1b1e7cd258b4079414aabd0 (diff)
parent06eb806d9c57012f54c3aa65c8f6be92ea458c58 (diff)
downloadconnectivity-master.tar.gz
Original change: https://android-review.googlesource.com/c/platform/packages/apps/Test/connectivity/+/2371574 Change-Id: If0dd745b1fc30ad753a9ba7a87638a480423db7e Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'sl4n/rapidjson/example/messagereader/messagereader.cpp')
-rw-r--r--sl4n/rapidjson/example/messagereader/messagereader.cpp96
1 files changed, 0 insertions, 96 deletions
diff --git a/sl4n/rapidjson/example/messagereader/messagereader.cpp b/sl4n/rapidjson/example/messagereader/messagereader.cpp
deleted file mode 100644
index 50255b3..0000000
--- a/sl4n/rapidjson/example/messagereader/messagereader.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-// Reading a message JSON with Reader (SAX-style API).
-// The JSON should be an object with key-string pairs.
-
-#include "rapidjson/reader.h"
-#include "rapidjson/error/en.h"
-#include <iostream>
-#include <string>
-#include <map>
-
-using namespace std;
-using namespace rapidjson;
-
-typedef map<string, string> MessageMap;
-
-#if defined(__GNUC__)
-RAPIDJSON_DIAG_PUSH
-RAPIDJSON_DIAG_OFF(effc++)
-#endif
-
-struct MessageHandler
- : public BaseReaderHandler<UTF8<>, MessageHandler> {
- MessageHandler() : messages_(), state_(kExpectObjectStart), name_() {}
-
- bool StartObject() {
- switch (state_) {
- case kExpectObjectStart:
- state_ = kExpectNameOrObjectEnd;
- return true;
- default:
- return false;
- }
- }
-
- bool String(const char* str, SizeType length, bool) {
- switch (state_) {
- case kExpectNameOrObjectEnd:
- name_ = string(str, length);
- state_ = kExpectValue;
- return true;
- case kExpectValue:
- messages_.insert(MessageMap::value_type(name_, string(str, length)));
- state_ = kExpectNameOrObjectEnd;
- return true;
- default:
- return false;
- }
- }
-
- bool EndObject(SizeType) { return state_ == kExpectNameOrObjectEnd; }
-
- bool Default() { return false; } // All other events are invalid.
-
- MessageMap messages_;
- enum State {
- kExpectObjectStart,
- kExpectNameOrObjectEnd,
- kExpectValue
- }state_;
- std::string name_;
-};
-
-#if defined(__GNUC__)
-RAPIDJSON_DIAG_POP
-#endif
-
-void ParseMessages(const char* json, MessageMap& messages) {
- Reader reader;
- MessageHandler handler;
- StringStream ss(json);
- if (reader.Parse(ss, handler))
- messages.swap(handler.messages_); // Only change it if success.
- else {
- ParseErrorCode e = reader.GetParseErrorCode();
- size_t o = reader.GetErrorOffset();
- cout << "Error: " << GetParseError_En(e) << endl;;
- cout << " at offset " << o << " near '" << string(json).substr(o, 10) << "...'" << endl;
- }
-}
-
-int main() {
- MessageMap messages;
-
- const char* json1 = "{ \"greeting\" : \"Hello!\", \"farewell\" : \"bye-bye!\" }";
- cout << json1 << endl;
- ParseMessages(json1, messages);
-
- for (MessageMap::const_iterator itr = messages.begin(); itr != messages.end(); ++itr)
- cout << itr->first << ": " << itr->second << endl;
-
- cout << endl << "Parse a JSON with invalid schema." << endl;
- const char* json2 = "{ \"greeting\" : \"Hello!\", \"farewell\" : \"bye-bye!\", \"foo\" : {} }";
- cout << json2 << endl;
- ParseMessages(json2, messages);
-
- return 0;
-}