/tmp/bitcoin/src/util/result.h
Line | Count | Source |
1 | | // Copyright (c) 2022-present The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or https://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #ifndef BITCOIN_UTIL_RESULT_H |
6 | | #define BITCOIN_UTIL_RESULT_H |
7 | | |
8 | | #include <attributes.h> |
9 | | #include <util/translation.h> |
10 | | |
11 | | #include <variant> |
12 | | |
13 | | namespace util { |
14 | | |
15 | | struct Error { |
16 | | bilingual_str message; |
17 | | }; |
18 | | |
19 | | //! The util::Result class provides a standard way for functions to return |
20 | | //! either error messages or result values. |
21 | | //! |
22 | | //! It is intended for high-level functions that need to report error strings to |
23 | | //! end users. Lower-level functions that don't need this error-reporting and |
24 | | //! that only need error-handling should avoid util::Result and instead use |
25 | | //! util::Expected, std::optional, std::variant, or custom structs |
26 | | //! and enum types to return function results. |
27 | | //! |
28 | | //! Usage examples can be found in \example ../test/result_tests.cpp, but in |
29 | | //! general code returning `util::Result<T>` values is very similar to code |
30 | | //! returning `std::optional<T>` values. Existing functions returning |
31 | | //! `std::optional<T>` can be updated to return `util::Result<T>` and return |
32 | | //! error strings usually just replacing `return std::nullopt;` with `return |
33 | | //! util::Error{error_string};`. |
34 | | template <class M> |
35 | | class Result |
36 | | { |
37 | | private: |
38 | | using T = std::conditional_t<std::is_same_v<M, void>, std::monostate, M>; |
39 | | |
40 | | std::variant<bilingual_str, T> m_variant; |
41 | | |
42 | | //! Disallow copy constructor, require Result to be moved for efficiency. |
43 | | Result(const Result&) = delete; |
44 | | |
45 | | //! Disallow operator= to avoid confusion in the future when the Result |
46 | | //! class gains support for richer error reporting, and callers should have |
47 | | //! ability to set a new result value without clearing existing error |
48 | | //! messages. |
49 | | Result& operator=(const Result&) = delete; |
50 | | Result& operator=(Result&&) = delete; |
51 | | |
52 | | template <typename FT> |
53 | | friend bilingual_str ErrorString(const Result<FT>& result); |
54 | | |
55 | | public: |
56 | 17.8k | Result() : m_variant{std::in_place_index_t<1>{}, std::monostate{}} {} // constructor for void |
57 | 52.4k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {}util::Result<int>::Result(int) Line | Count | Source | 57 | 77 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<bilingual_str>::Result(bilingual_str) Line | Count | Source | 57 | 2 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<result_tests::NoCopy>::Result(result_tests::NoCopy) Line | Count | Source | 57 | 2 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<kernel::ChainstateManagerOpts>::Result(kernel::ChainstateManagerOpts) Line | Count | Source | 57 | 11 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::Result(std::unique_ptr<AddrMan, std::default_delete<AddrMan>>) Line | Count | Source | 57 | 1.05k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::Result(std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>) Line | Count | Source | 57 | 1.33k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<CBlockIndex*>::Result(CBlockIndex*) Line | Count | Source | 57 | 14 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<wallet::SelectionResult>::Result(wallet::SelectionResult) Line | Count | Source | 57 | 22.2k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
Unexecuted instantiation: util::Result<std::unique_ptr<interfaces::Wallet, std::default_delete<interfaces::Wallet>>>::Result(std::unique_ptr<interfaces::Wallet, std::default_delete<interfaces::Wallet>>) Unexecuted instantiation: util::Result<interfaces::WalletMigrationResult>::Result(interfaces::WalletMigrationResult) util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::Result(std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>) Line | Count | Source | 57 | 21.3k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<wallet::CreatedTransactionResult>::Result(wallet::CreatedTransactionResult) Line | Count | Source | 57 | 3.51k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<wallet::CoinsResult>::Result(wallet::CoinsResult) Line | Count | Source | 57 | 506 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<fs::path>::Result(fs::path) Line | Count | Source | 57 | 1.40k | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::Result(std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>) Line | Count | Source | 57 | 844 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<wallet::MigrationResult>::Result(wallet::MigrationResult) Line | Count | Source | 57 | 35 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
util::Result<ExternalSigner>::Result(ExternalSigner) Line | Count | Source | 57 | 10 | Result(T obj) : m_variant{std::in_place_index_t<1>{}, std::move(obj)} {} |
|
58 | 8.74k | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {}util::Result<int>::Result(util::Error) Line | Count | Source | 58 | 6 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<bilingual_str>::Result(util::Error) Line | Count | Source | 58 | 2 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<result_tests::NoCopy>::Result(util::Error) Line | Count | Source | 58 | 2 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<kernel::ChainstateManagerOpts>::Result(util::Error) Line | Count | Source | 58 | 4 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::Result(util::Error) Line | Count | Source | 58 | 9 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<void>::Result(util::Error) Line | Count | Source | 58 | 42 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
Unexecuted instantiation: util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::Result(util::Error) util::Result<CBlockIndex*>::Result(util::Error) Line | Count | Source | 58 | 50 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<wallet::SelectionResult>::Result(util::Error) Line | Count | Source | 58 | 8.46k | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
Unexecuted instantiation: util::Result<std::unique_ptr<interfaces::Wallet, std::default_delete<interfaces::Wallet>>>::Result(util::Error) Unexecuted instantiation: util::Result<interfaces::WalletMigrationResult>::Result(util::Error) util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::Result(util::Error) Line | Count | Source | 58 | 22 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<wallet::CoinsResult>::Result(util::Error) Line | Count | Source | 58 | 6 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<wallet::CreatedTransactionResult>::Result(util::Error) Line | Count | Source | 58 | 119 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<fs::path>::Result(util::Error) Line | Count | Source | 58 | 4 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::Result(util::Error) Line | Count | Source | 58 | 3 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<wallet::MigrationResult>::Result(util::Error) Line | Count | Source | 58 | 14 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
util::Result<ExternalSigner>::Result(util::Error) Line | Count | Source | 58 | 2 | Result(Error error) : m_variant{std::in_place_index_t<0>{}, std::move(error.message)} {} |
|
59 | 4.12k | Result(Result&&) = default; util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::Result(util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>&&) Line | Count | Source | 59 | 4 | Result(Result&&) = default; |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::Result(util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>&&) Line | Count | Source | 59 | 14 | Result(Result&&) = default; |
util::Result<wallet::SelectionResult>::Result(util::Result<wallet::SelectionResult>&&) Line | Count | Source | 59 | 3.63k | Result(Result&&) = default; |
util::Result<wallet::CreatedTransactionResult>::Result(util::Result<wallet::CreatedTransactionResult>&&) Line | Count | Source | 59 | 472 | Result(Result&&) = default; |
|
60 | 83.1k | ~Result() = default; util::Result<void>::~Result() Line | Count | Source | 60 | 17.9k | ~Result() = default; |
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::~Result() Line | Count | Source | 60 | 1.33k | ~Result() = default; |
util::Result<int>::~Result() Line | Count | Source | 60 | 83 | ~Result() = default; |
util::Result<result_tests::NoCopy>::~Result() Line | Count | Source | 60 | 4 | ~Result() = default; |
util::Result<bilingual_str>::~Result() Line | Count | Source | 60 | 4 | ~Result() = default; |
util::Result<CBlockIndex*>::~Result() Line | Count | Source | 60 | 64 | ~Result() = default; |
util::Result<kernel::ChainstateManagerOpts>::~Result() Line | Count | Source | 60 | 15 | ~Result() = default; |
util::Result<wallet::SelectionResult>::~Result() Line | Count | Source | 60 | 34.3k | ~Result() = default; |
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::~Result() Line | Count | Source | 60 | 21.3k | ~Result() = default; |
util::Result<wallet::CoinsResult>::~Result() Line | Count | Source | 60 | 512 | ~Result() = default; |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::~Result() Line | Count | Source | 60 | 861 | ~Result() = default; |
util::Result<wallet::CreatedTransactionResult>::~Result() Line | Count | Source | 60 | 4.10k | ~Result() = default; |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::~Result() Line | Count | Source | 60 | 1.05k | ~Result() = default; |
util::Result<wallet::MigrationResult>::~Result() Line | Count | Source | 60 | 49 | ~Result() = default; |
util::Result<ExternalSigner>::~Result() Line | Count | Source | 60 | 12 | ~Result() = default; |
util::Result<fs::path>::~Result() Line | Count | Source | 60 | 1.41k | ~Result() = default; |
|
61 | | |
62 | | //! std::optional methods, so functions returning optional<T> can change to |
63 | | //! return Result<T> with minimal changes to existing code, and vice versa. |
64 | 195k | bool has_value() const noexcept { return m_variant.index() == 1; }util::Result<void>::has_value() const Line | Count | Source | 64 | 17.9k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::has_value() const Line | Count | Source | 64 | 4.00k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<int>::has_value() const Line | Count | Source | 64 | 169 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<result_tests::NoCopy>::has_value() const Line | Count | Source | 64 | 11 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<bilingual_str>::has_value() const Line | Count | Source | 64 | 11 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<CBlockIndex*>::has_value() const Line | Count | Source | 64 | 95 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<kernel::ChainstateManagerOpts>::has_value() const Line | Count | Source | 64 | 37 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::has_value() const Line | Count | Source | 64 | 77.3k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<wallet::CoinsResult>::has_value() const Line | Count | Source | 64 | 1.02k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<wallet::SelectionResult>::has_value() const Line | Count | Source | 64 | 73.0k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::has_value() const Line | Count | Source | 64 | 1.63k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<wallet::CreatedTransactionResult>::has_value() const Line | Count | Source | 64 | 14.9k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::has_value() const Line | Count | Source | 64 | 2.11k | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<wallet::MigrationResult>::has_value() const Line | Count | Source | 64 | 216 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<ExternalSigner>::has_value() const Line | Count | Source | 64 | 24 | bool has_value() const noexcept { return m_variant.index() == 1; } |
util::Result<fs::path>::has_value() const Line | Count | Source | 64 | 2.86k | bool has_value() const noexcept { return m_variant.index() == 1; } |
|
65 | | const T& value() const LIFETIMEBOUND |
66 | 5.11k | { |
67 | 5.11k | assert(has_value()); |
68 | 5.11k | return std::get<1>(m_variant); |
69 | 5.11k | } util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::value() const Line | Count | Source | 66 | 2.67k | { | 67 | 2.67k | assert(has_value()); | 68 | 2.67k | return std::get<1>(m_variant); | 69 | 2.67k | } |
util::Result<int>::value() const Line | Count | Source | 66 | 78 | { | 67 | 78 | assert(has_value()); | 68 | 78 | return std::get<1>(m_variant); | 69 | 78 | } |
util::Result<result_tests::NoCopy>::value() const Line | Count | Source | 66 | 3 | { | 67 | 3 | assert(has_value()); | 68 | 3 | return std::get<1>(m_variant); | 69 | 3 | } |
util::Result<bilingual_str>::value() const Line | Count | Source | 66 | 3 | { | 67 | 3 | assert(has_value()); | 68 | 3 | return std::get<1>(m_variant); | 69 | 3 | } |
util::Result<kernel::ChainstateManagerOpts>::value() const Line | Count | Source | 66 | 11 | { | 67 | 11 | assert(has_value()); | 68 | 11 | return std::get<1>(m_variant); | 69 | 11 | } |
util::Result<wallet::SelectionResult>::value() const Line | Count | Source | 66 | 898 | { | 67 | 898 | assert(has_value()); | 68 | 898 | return std::get<1>(m_variant); | 69 | 898 | } |
util::Result<fs::path>::value() const Line | Count | Source | 66 | 1.45k | { | 67 | 1.45k | assert(has_value()); | 68 | 1.45k | return std::get<1>(m_variant); | 69 | 1.45k | } |
|
70 | | T& value() LIFETIMEBOUND |
71 | 70.7k | { |
72 | 70.7k | assert(has_value()); |
73 | 70.7k | return std::get<1>(m_variant); |
74 | 70.7k | } util::Result<int>::value() Line | Count | Source | 71 | 1 | { | 72 | 1 | assert(has_value()); | 73 | 1 | return std::get<1>(m_variant); | 74 | 1 | } |
util::Result<result_tests::NoCopy>::value() Line | Count | Source | 71 | 1 | { | 72 | 1 | assert(has_value()); | 73 | 1 | return std::get<1>(m_variant); | 74 | 1 | } |
util::Result<bilingual_str>::value() Line | Count | Source | 71 | 1 | { | 72 | 1 | assert(has_value()); | 73 | 1 | return std::get<1>(m_variant); | 74 | 1 | } |
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::value() Line | Count | Source | 71 | 38.5k | { | 72 | 38.5k | assert(has_value()); | 73 | 38.5k | return std::get<1>(m_variant); | 74 | 38.5k | } |
util::Result<wallet::SelectionResult>::value() Line | Count | Source | 71 | 22.6k | { | 72 | 22.6k | assert(has_value()); | 73 | 22.6k | return std::get<1>(m_variant); | 74 | 22.6k | } |
util::Result<wallet::CoinsResult>::value() Line | Count | Source | 71 | 506 | { | 72 | 506 | assert(has_value()); | 73 | 506 | return std::get<1>(m_variant); | 74 | 506 | } |
util::Result<wallet::CreatedTransactionResult>::value() Line | Count | Source | 71 | 7.04k | { | 72 | 7.04k | assert(has_value()); | 73 | 7.04k | return std::get<1>(m_variant); | 74 | 7.04k | } |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::value() Line | Count | Source | 71 | 780 | { | 72 | 780 | assert(has_value()); | 73 | 780 | return std::get<1>(m_variant); | 74 | 780 | } |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::value() Line | Count | Source | 71 | 1.05k | { | 72 | 1.05k | assert(has_value()); | 73 | 1.05k | return std::get<1>(m_variant); | 74 | 1.05k | } |
util::Result<CBlockIndex*>::value() Line | Count | Source | 71 | 9 | { | 72 | 9 | assert(has_value()); | 73 | 9 | return std::get<1>(m_variant); | 74 | 9 | } |
util::Result<wallet::MigrationResult>::value() Line | Count | Source | 71 | 153 | { | 72 | 153 | assert(has_value()); | 73 | 153 | return std::get<1>(m_variant); | 74 | 153 | } |
util::Result<ExternalSigner>::value() Line | Count | Source | 71 | 10 | { | 72 | 10 | assert(has_value()); | 73 | 10 | return std::get<1>(m_variant); | 74 | 10 | } |
|
75 | | template <class U> |
76 | | T value_or(U&& default_value) const& |
77 | | { |
78 | | return has_value() ? value() : std::forward<U>(default_value); |
79 | | } |
80 | | template <class U> |
81 | | T value_or(U&& default_value) && |
82 | 6 | { |
83 | 6 | return has_value() ? std::move(value()) : std::forward<U>(default_value); |
84 | 6 | } int util::Result<int>::value_or<int>(int&&) && Line | Count | Source | 82 | 2 | { | 83 | 2 | return has_value() ? std::move(value()) : std::forward<U>(default_value); | 84 | 2 | } |
result_tests::NoCopy util::Result<result_tests::NoCopy>::value_or<int>(int&&) && Line | Count | Source | 82 | 2 | { | 83 | 2 | return has_value() ? std::move(value()) : std::forward<U>(default_value); | 84 | 2 | } |
bilingual_str util::Result<bilingual_str>::value_or<bilingual_str>(bilingual_str&&) && Line | Count | Source | 82 | 2 | { | 83 | 2 | return has_value() ? std::move(value()) : std::forward<U>(default_value); | 84 | 2 | } |
|
85 | 116k | explicit operator bool() const noexcept { return has_value(); }util::Result<void>::operator bool() const Line | Count | Source | 85 | 17.9k | explicit operator bool() const noexcept { return has_value(); } |
util::Result<int>::operator bool() const Line | Count | Source | 85 | 87 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<result_tests::NoCopy>::operator bool() const Line | Count | Source | 85 | 4 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<bilingual_str>::operator bool() const Line | Count | Source | 85 | 4 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<CBlockIndex*>::operator bool() const Line | Count | Source | 85 | 86 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<kernel::ChainstateManagerOpts>::operator bool() const Line | Count | Source | 85 | 26 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::operator bool() const Line | Count | Source | 85 | 38.8k | explicit operator bool() const noexcept { return has_value(); } |
util::Result<wallet::CoinsResult>::operator bool() const Line | Count | Source | 85 | 518 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<wallet::SelectionResult>::operator bool() const Line | Count | Source | 85 | 49.4k | explicit operator bool() const noexcept { return has_value(); } |
util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>::operator bool() const Line | Count | Source | 85 | 850 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<wallet::CreatedTransactionResult>::operator bool() const Line | Count | Source | 85 | 6.17k | explicit operator bool() const noexcept { return has_value(); } |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::operator bool() const Line | Count | Source | 85 | 1.06k | explicit operator bool() const noexcept { return has_value(); } |
Unexecuted instantiation: util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::operator bool() const util::Result<wallet::MigrationResult>::operator bool() const Line | Count | Source | 85 | 63 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<ExternalSigner>::operator bool() const Line | Count | Source | 85 | 14 | explicit operator bool() const noexcept { return has_value(); } |
util::Result<fs::path>::operator bool() const Line | Count | Source | 85 | 1.41k | explicit operator bool() const noexcept { return has_value(); } |
|
86 | 717 | const T* operator->() const LIFETIMEBOUND { return &value(); }util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>::operator->() const Line | Count | Source | 86 | 14 | const T* operator->() const LIFETIMEBOUND { return &value(); } |
util::Result<wallet::SelectionResult>::operator->() const Line | Count | Source | 86 | 703 | const T* operator->() const LIFETIMEBOUND { return &value(); } |
|
87 | 1.66k | const T& operator*() const LIFETIMEBOUND { return value(); }util::Result<int>::operator*() const Line | Count | Source | 87 | 1 | const T& operator*() const LIFETIMEBOUND { return value(); } |
util::Result<result_tests::NoCopy>::operator*() const Line | Count | Source | 87 | 1 | const T& operator*() const LIFETIMEBOUND { return value(); } |
util::Result<bilingual_str>::operator*() const Line | Count | Source | 87 | 1 | const T& operator*() const LIFETIMEBOUND { return value(); } |
util::Result<kernel::ChainstateManagerOpts>::operator*() const Line | Count | Source | 87 | 11 | const T& operator*() const LIFETIMEBOUND { return value(); } |
util::Result<wallet::SelectionResult>::operator*() const Line | Count | Source | 87 | 195 | const T& operator*() const LIFETIMEBOUND { return value(); } |
util::Result<fs::path>::operator*() const Line | Count | Source | 87 | 1.45k | const T& operator*() const LIFETIMEBOUND { return value(); } |
|
88 | 5.60k | T* operator->() LIFETIMEBOUND { return &value(); }util::Result<wallet::SelectionResult>::operator->() Line | Count | Source | 88 | 734 | T* operator->() LIFETIMEBOUND { return &value(); } |
util::Result<wallet::CreatedTransactionResult>::operator->() Line | Count | Source | 88 | 4.71k | T* operator->() LIFETIMEBOUND { return &value(); } |
Unexecuted instantiation: util::Result<wallet::CoinsResult>::operator->() util::Result<wallet::MigrationResult>::operator->() Line | Count | Source | 88 | 153 | T* operator->() LIFETIMEBOUND { return &value(); } |
util::Result<ExternalSigner>::operator->() Line | Count | Source | 88 | 6 | T* operator->() LIFETIMEBOUND { return &value(); } |
|
89 | 64.3k | T& operator*() LIFETIMEBOUND { return value(); }util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>::operator*() Line | Count | Source | 89 | 38.5k | T& operator*() LIFETIMEBOUND { return value(); } |
util::Result<wallet::SelectionResult>::operator*() Line | Count | Source | 89 | 21.9k | T& operator*() LIFETIMEBOUND { return value(); } |
util::Result<wallet::CoinsResult>::operator*() Line | Count | Source | 89 | 506 | T& operator*() LIFETIMEBOUND { return value(); } |
util::Result<wallet::CreatedTransactionResult>::operator*() Line | Count | Source | 89 | 2.33k | T& operator*() LIFETIMEBOUND { return value(); } |
util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>::operator*() Line | Count | Source | 89 | 1.05k | T& operator*() LIFETIMEBOUND { return value(); } |
util::Result<CBlockIndex*>::operator*() Line | Count | Source | 89 | 9 | T& operator*() LIFETIMEBOUND { return value(); } |
util::Result<ExternalSigner>::operator*() Line | Count | Source | 89 | 4 | T& operator*() LIFETIMEBOUND { return value(); } |
|
90 | | }; |
91 | | |
92 | | template <typename T> |
93 | | bilingual_str ErrorString(const Result<T>& result) |
94 | 12.4k | { |
95 | 12.4k | return result ? bilingual_str{} : std::get<0>(result.m_variant); |
96 | 12.4k | } bilingual_str util::ErrorString<int>(util::Result<int> const&) Line | Count | Source | 94 | 6 | { | 95 | 6 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 6 | } |
bilingual_str util::ErrorString<result_tests::NoCopy>(util::Result<result_tests::NoCopy> const&) Line | Count | Source | 94 | 2 | { | 95 | 2 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 2 | } |
bilingual_str util::ErrorString<bilingual_str>(util::Result<bilingual_str> const&) Line | Count | Source | 94 | 2 | { | 95 | 2 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 2 | } |
bilingual_str util::ErrorString<kernel::ChainstateManagerOpts>(util::Result<kernel::ChainstateManagerOpts> const&) Line | Count | Source | 94 | 11 | { | 95 | 11 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 11 | } |
bilingual_str util::ErrorString<void>(util::Result<void> const&) Line | Count | Source | 94 | 42 | { | 95 | 42 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 42 | } |
bilingual_str util::ErrorString<wallet::SelectionResult>(util::Result<wallet::SelectionResult> const&) Line | Count | Source | 94 | 12.2k | { | 95 | 12.2k | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 12.2k | } |
bilingual_str util::ErrorString<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>>(util::Result<std::unique_ptr<AddrMan, std::default_delete<AddrMan>>> const&) Line | Count | Source | 94 | 9 | { | 95 | 9 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 9 | } |
Unexecuted instantiation: bilingual_str util::ErrorString<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>>(util::Result<std::pair<std::vector<FeeFrac, std::allocator<FeeFrac>>, std::vector<FeeFrac, std::allocator<FeeFrac>>>> const&) bilingual_str util::ErrorString<CBlockIndex*>(util::Result<CBlockIndex*> const&) Line | Count | Source | 94 | 22 | { | 95 | 22 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 22 | } |
bilingual_str util::ErrorString<wallet::MigrationResult>(util::Result<wallet::MigrationResult> const&) Line | Count | Source | 94 | 14 | { | 95 | 14 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 14 | } |
bilingual_str util::ErrorString<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>(util::Result<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>> const&) Line | Count | Source | 94 | 21 | { | 95 | 21 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 21 | } |
bilingual_str util::ErrorString<wallet::CoinsResult>(util::Result<wallet::CoinsResult> const&) Line | Count | Source | 94 | 6 | { | 95 | 6 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 6 | } |
bilingual_str util::ErrorString<ExternalSigner>(util::Result<ExternalSigner> const&) Line | Count | Source | 94 | 2 | { | 95 | 2 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 2 | } |
bilingual_str util::ErrorString<fs::path>(util::Result<fs::path> const&) Line | Count | Source | 94 | 4 | { | 95 | 4 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 4 | } |
bilingual_str util::ErrorString<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>>(util::Result<std::reference_wrapper<wallet::DescriptorScriptPubKeyMan>> const&) Line | Count | Source | 94 | 3 | { | 95 | 3 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 3 | } |
bilingual_str util::ErrorString<wallet::CreatedTransactionResult>(util::Result<wallet::CreatedTransactionResult> const&) Line | Count | Source | 94 | 111 | { | 95 | 111 | return result ? bilingual_str{} : std::get<0>(result.m_variant); | 96 | 111 | } |
|
97 | | } // namespace util |
98 | | |
99 | | #endif // BITCOIN_UTIL_RESULT_H |