1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
// This file is part of Gear.
// Copyright (C) 2021-2024 Gear Technologies Inc.
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/// Errors stating that gas tree has been invalidated.
///
/// Contains constructors for all existing errors.
pub trait Error {
/// Gas (gas tree) has already been created for the provided key.
fn node_already_exists() -> Self;
/// Parent must be in the tree, but not found.
///
/// This differs from `node_not_found`, because parent
/// node for local node types must be found, but was not. Thus,
/// tree is invalidated.
fn parent_is_lost() -> Self;
/// Parent node must have children, but they weren't found.
///
/// If node is a parent to some other node it must have at least
/// one child, otherwise it's id can't be used as a parent for
/// local nodes in the tree.
fn parent_has_no_children() -> Self;
/// Value node doesn't exist for a key.
fn node_not_found() -> Self;
/// Procedure can't be called on consumed node.
fn node_was_consumed() -> Self;
/// Account doesn't have enough funds to complete operation.
fn insufficient_balance() -> Self;
/// Forbidden operation for the value node.
fn forbidden() -> Self;
/// Output of `Tree::consume` procedure that wasn't expected.
///
/// Outputs of consumption procedure are determined. The error is returned
/// when unexpected one occurred. That signals, that algorithm works wrong
/// and expected invariants are not correct.
fn unexpected_consume_output() -> Self;
/// Node type that can't occur if algorithm work well
fn unexpected_node_type() -> Self;
/// Value must have been caught, but was missed or blocked
/// (see `TreeImpl::catch_value` for details).
fn value_is_not_caught() -> Self;
/// Value must have been caught or moved upstream, but was blocked
/// (see `TreeImpl::catch_value` for details).
fn value_is_blocked() -> Self;
/// Value must have been blocked, but was either moved or caught
/// (see `TreeImpl::catch_value` for details).
fn value_is_not_blocked() -> Self;
/// `GasTree::consume` called on node, which has some balance locked.
fn consumed_with_lock() -> Self;
/// `GasTree::consume` called on node, which has some system reservation.
fn consumed_with_system_reservation() -> Self;
/// `GasTree::create` called with some value amount leading to
/// the total value overflow.
fn total_value_is_overflowed() -> Self;
/// Either `GasTree::consume` or `GasTree::spent` called on a node creating
/// negative imbalance which leads to the total value drop below 0.
fn total_value_is_underflowed() -> Self;
}