bool ReapError(error::ErrorStack& errs) { if (the_error.empty()) return false; errs.push(the_error.release()); return true; }
void set_missing_required(const char* name) { if (the_error.empty() || the_error->type() != error::MISSING_REQUIRED) the_error.reset(new error::RequiredFieldMissingError()); std::vector<std::string>& missing = static_cast<error::RequiredFieldMissingError*>(the_error.get())->missing_members(); missing.push_back(name); }
bool check_depth(const char* type) { if (depth <= 0) { the_error.reset(new error::TypeMismatchError("object", type)); return false; } return true; }
void PrepareForReuse() { depth = 0; state = -1; the_error.reset(); reset_flags(); handler_0.PrepareForReuse(); }
bool EndObject(SizeType length) { --depth; if (depth > 0) { switch (state) { case 0: return checked_event_forwarding(handler_0.EndObject(length)); default: break; } } else { if (!has_SpaceID) set_missing_required("SpaceID"); } return the_error.empty(); }
bool set_type_mismatch(const char* actual_type) { the_error.reset(new error::TypeMismatchError(type_name(), actual_type)); return false; }
bool set_out_of_range(const char* actual_type) { the_error.reset(new error::NumberOutOfRangeError(type_name(), actual_type)); return false; }
void PrepareForReuse() { the_error.reset(); }
bool HasError() const { return !the_error.empty(); }
bool checked_event_forwarding(bool success) { if (!success) the_error.reset(new error::ObjectMemberError(current_member_name())); return success; }