// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CRDTP_ERROR_SUPPORT_H_ #define CRDTP_ERROR_SUPPORT_H_ #include <cstdint> #include <string> #include <vector> #include "export.h" #include "span.h" namespace crdtp { // ============================================================================= // ErrorSupport - For tracking errors in tree structures. // ============================================================================= // This abstraction is used when converting between Values and inspector // objects, e.g. in lib/ValueConversions_{h,cc}.template. As the processing // enters and exits a branch, we call Push / Pop. Within the branch, // we either set the name or an index (in case we're processing the element of a // list/vector). Only once an error is seen, the path which is now on the // stack is materialized and prefixes the error message. E.g., // "foo.bar.2: some error". After error collection, ::Errors() is used to // access the message. class CRDTP_EXPORT ErrorSupport { … }; } // namespace crdtp #endif // CRDTP_ERROR_SUPPORT_H_