| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_DIAGNOSTICS_BUILDER_H_ |
| #define CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_DIAGNOSTICS_BUILDER_H_ |
| |
| #include <optional> |
| #include <string> |
| |
| #include "chrome/browser/ash/guest_os/guest_os_diagnostics.mojom.h" |
| #include "url/gurl.h" |
| |
| namespace guest_os { |
| |
| // A helper to make building a `mojom::Diagnostics` easier. |
| class DiagnosticsBuilder { |
| public: |
| DiagnosticsBuilder(); |
| ~DiagnosticsBuilder(); |
| |
| struct EntryBuilder { |
| friend DiagnosticsBuilder; |
| |
| // The default status of the entry is pass. |
| explicit EntryBuilder(const std::string& requirement); |
| explicit EntryBuilder(int requirement_message_id); |
| |
| EntryBuilder(EntryBuilder&&); |
| ~EntryBuilder(); |
| |
| // Set the status to N/A. |
| void SetNotApplicable(); |
| |
| // Set the status to fail. By default, the associated top error is assumed |
| // to be the same as the explanation. You can call `OverrideTopError()` to |
| // change it. Also see `DiagnosticsBuilder::AddEntry()` for how the top |
| // error is applied. |
| EntryBuilder& SetFail( |
| const std::string& explanation, |
| const std::optional<GURL>& learn_more_link = std::nullopt); |
| void OverrideTopError( |
| const std::string& error, |
| const std::optional<GURL>& learn_more_link = std::nullopt); |
| |
| // Version that accepting a message id. |
| EntryBuilder& SetFail( |
| int explanation_message_id, |
| const std::optional<GURL>& learn_more_link = std::nullopt); |
| void OverrideTopError( |
| int error_message_id, |
| const std::optional<GURL>& learn_more_link = std::nullopt); |
| |
| private: |
| mojom::DiagnosticEntryPtr entry_; |
| mojom::DiagnosticMessagePtr overridden_top_error_; |
| }; |
| |
| // Add a new entry. If the top error hasn't been set, the top error inside the |
| // entry builder will only be used. |
| void AddEntry(EntryBuilder builder); |
| |
| // Return the built diagnostics. This builder should not be used any more. |
| mojom::DiagnosticsPtr Build(); |
| |
| private: |
| mojom::DiagnosticsPtr diagnostics_; |
| }; |
| |
| } // namespace guest_os |
| |
| #endif // CHROME_BROWSER_ASH_GUEST_OS_GUEST_OS_DIAGNOSTICS_BUILDER_H_ |