tree/
error.rs

1// This file is part of `tree-rizzen-yazston` crate. For the terms of use, please see the file
2// called `LICENSE-BSD-3-Clause` at the top level of the `tree-rizzen-yazston` crate.
3
4use std::error::Error; // Experimental in `core` crate.
5use core::fmt::{ Display, Formatter, Result };
6
7#[derive( Debug )]
8#[non_exhaustive]
9pub enum TreeError {
10    RetrievingNode( usize ),
11    NoChildrenAllowed( usize ),
12    ExceedsChildren( usize, usize ),
13    HasChildren( usize ),
14    MissingInParent( usize, usize ),
15    RootHasNoParent( usize ),
16    NoChildrenFound( usize ),
17    NoDataAllowed( usize ),
18    NotAncestorOf( usize, usize, Box<TreeError> ),
19    IsAncestorOf( usize, usize ),
20}
21
22impl Display for TreeError {
23    fn fmt( &self, formatter: &mut Formatter ) -> Result {
24        match self {
25            TreeError::RetrievingNode( index ) =>
26                write!( formatter, "Failed to retrieve the node for the index {}.", index ),
27            TreeError::NoChildrenAllowed( index ) =>
28                write!( formatter, "No children is allowed for the node {}.", index ),
29            TreeError::ExceedsChildren( position, index ) =>
30                write!( formatter, "Position {} exceeds length of children for the node {}.", position, index ),
31            TreeError::HasChildren( index ) =>
32                write!( formatter, "Can't delete the node {} as it still has children.", index ),
33            TreeError::MissingInParent( index, parent ) =>
34                write!( formatter, "The node {} is missing in the children of its parent {}.", index, parent ),
35            TreeError::RootHasNoParent( index ) =>
36                write!( formatter, "The root node {} can't have a parent.", index ),
37            TreeError::NoChildrenFound( index ) =>
38                write!( formatter, "No children were found for the node {}.", index ),
39            TreeError::NoDataAllowed( index ) =>
40                write!( formatter, "No data is allowed for the node {}.", index ),
41            TreeError::NotAncestorOf( index,is_ancestor, ref error ) =>
42                write!(
43                    formatter,
44                    "The node {} is not an ancestor of node {}. The error is: ‘{:#?}’.",
45                    is_ancestor,
46                    index,
47                    error,
48                ),
49            TreeError::IsAncestorOf( index,is_ancestor ) =>
50                write!( formatter, "The node {} is an ancestor of the node {}.", is_ancestor, index, ),
51        }
52    }
53}
54
55// Does not make use of source.
56impl Error for TreeError {}