Remove on_{begin,end}_{string,number}

And add `done` arg to data callback
This commit is contained in:
2025-05-25 21:01:37 -04:00
parent f92b33eec3
commit f6cd807da3
6 changed files with 95 additions and 154 deletions

View File

@@ -52,6 +52,7 @@ struct ReadValueState {
return;
}
}
bool startedData = false;
};
inline WeaselJsonCallbacks readValueCallbacks() {
@@ -66,17 +67,17 @@ inline WeaselJsonCallbacks readValueCallbacks() {
state->isKeyStack.pop_back();
state->on_end_value();
};
result.on_begin_string = +[](void *p) {
auto *state = (ReadValueState *)p;
state->valueStack.emplace_back(std::string());
};
result.on_string_data = +[](void *p, const char *buf, int len) {
result.on_string_data = +[](void *p, const char *buf, int len, int done) {
auto *state = (ReadValueState *)p;
if (!state->startedData) {
state->startedData = true;
state->valueStack.emplace_back(std::string());
}
std::get<std::string>(state->valueStack.back()).append(buf, len);
};
result.on_end_string = +[](void *p) {
auto *state = (ReadValueState *)p;
state->on_end_value();
if (done) {
state->startedData = false;
state->on_end_value();
}
};
result.on_begin_array = +[](void *p) {
auto *state = (ReadValueState *)p;
@@ -86,17 +87,17 @@ inline WeaselJsonCallbacks readValueCallbacks() {
auto *state = (ReadValueState *)p;
state->on_end_value();
};
result.on_begin_number = +[](void *p) {
auto *state = (ReadValueState *)p;
state->valueStack.emplace_back(JsonNumber());
};
result.on_number_data = +[](void *p, const char *buf, int len) {
result.on_number_data = +[](void *p, const char *buf, int len, int done) {
auto *state = (ReadValueState *)p;
if (!state->startedData) {
state->startedData = true;
state->valueStack.emplace_back(JsonNumber());
}
std::get<JsonNumber>(state->valueStack.back()).append(buf, len);
};
result.on_end_number = +[](void *p) {
auto *state = (ReadValueState *)p;
state->on_end_value();
if (done) {
state->startedData = false;
state->on_end_value();
}
};
result.on_true_literal = +[](void *p) {
auto *state = (ReadValueState *)p;