blob: fd8fd3a94c7bff84f01a5a9d78c18b20f4041982 [file] [log] [blame]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBIPP_ERRORS_H_
#define LIBIPP_ERRORS_H_
#include <cstdint>
#include <string>
#include <string_view>
#include <vector>
#include "ipp_enums.h"
#include "ipp_export.h"
namespace ipp {
// Describes location of the attribute in the frame and the attribute's name.
class LIBIPP_EXPORT AttrPath {
public:
struct Segment {
uint16_t collection_index;
std::string attribute_name;
};
// Invalid value of GroupTag used to represent location in a frame's header.
static constexpr GroupTag kHeader = static_cast<GroupTag>(0);
explicit AttrPath(GroupTag group) : group_(group) {}
// Returns a string representation of the attribute's locations.
std::string AsString() const;
// Adds a new segment at the end of attribute's path. Converts the attribute's
// path to the path to one of its sub-attributes.
void PushBack(uint16_t collection_index, std::string_view attribute_name) {
path_.emplace_back(Segment{collection_index, std::string(attribute_name)});
}
// Removes the last segment from the attribute's path. Converts the
// attribute's path to the path to its parent attribute.
void PopBack() { path_.pop_back(); }
// Returns reference to the last element.
Segment& Back() { return path_.back(); }
private:
GroupTag group_;
std::vector<Segment> path_;
};
} // namespace ipp
#endif // LIBIPP_ERRORS_H_