| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_DEVELOPER_FORENSICS_FEEDBACK_ATTACHMENTS_TYPES_H_ |
| #define SRC_DEVELOPER_FORENSICS_FEEDBACK_ATTACHMENTS_TYPES_H_ |
| |
| #include <lib/syslog/cpp/macros.h> |
| |
| #include <map> |
| #include <set> |
| #include <string> |
| |
| #include "src/developer/forensics/utils/errors.h" |
| |
| namespace forensics::feedback { |
| |
| using AttachmentKey = std::string; |
| using AttachmentKeys = std::set<AttachmentKey>; |
| |
| class AttachmentValue { |
| public: |
| enum class State { |
| kComplete, |
| kPartial, |
| kMissing, |
| }; |
| |
| explicit AttachmentValue(const std::string& value) |
| : state_(State::kComplete), value_(value), error_(std::nullopt) {} |
| AttachmentValue(const std::string& value, enum Error error) |
| : state_(State::kPartial), value_(value), error_(error) {} |
| AttachmentValue(enum Error error) |
| : state_(State::kMissing), value_(std::nullopt), error_(error) {} |
| |
| bool HasValue() const { return value_.has_value(); } |
| |
| const std::string& Value() const { |
| FX_CHECK(HasValue()); |
| return value_.value(); |
| } |
| |
| bool HasError() const { return error_.has_value(); } |
| |
| enum Error Error() const { |
| FX_CHECK(HasError()); |
| return error_.value(); |
| } |
| |
| enum State State() const { return state_; } |
| |
| bool operator==(const AttachmentValue& other) const { |
| return (state_ == other.state_) && (value_ == other.value_) && (error_ == other.error_); |
| } |
| |
| private: |
| enum State state_; |
| std::optional<std::string> value_; |
| std::optional<enum Error> error_; |
| }; |
| |
| using Attachment = std::pair<AttachmentKey, AttachmentValue>; |
| using Attachments = std::map<AttachmentKey, AttachmentValue>; |
| |
| } // namespace forensics::feedback |
| |
| #endif // SRC_DEVELOPER_FORENSICS_FEEDBACK_ATTACHMENTS_TYPES_H_ |