// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_USER_EDUCATION_COMMON_FEATURE_PROMO_RESULT_H_ #define COMPONENTS_USER_EDUCATION_COMMON_FEATURE_PROMO_RESULT_H_ #include <optional> #include <ostream> namespace user_education { // Type that expresses the result of trying to show a feature promo as either // `kSuccess` or one of the given `Failure` reasons. Also used as the return // value of methods which check whether a promo could show. // // This object has a "truthy" value (kSuccess) and a list of "falsy" values // (any of the values of `Failure`). It can therefore be treated as both a // boolean and (if false) an error code. class FeaturePromoResult { … }; constexpr bool operator==(FeaturePromoResult::Failure f, const FeaturePromoResult& other) { … } constexpr bool operator!=(FeaturePromoResult::Failure f, const FeaturePromoResult& other) { … } std::ostream& operator<<(std::ostream& os, FeaturePromoResult::Failure failure); std::ostream& operator<<(std::ostream& os, const FeaturePromoResult& result); } // namespace user_education #endif // COMPONENTS_USER_EDUCATION_COMMON_FEATURE_PROMO_RESULT_H_