#[non_exhaustive]
pub enum Error {
CloseError,
BuildError,
CloseAtError,
Overflow,
MissingNode(usize),
// some variants omitted
}
Expand description
Errors raised while building a tree.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
CloseError
Error raised by Builder::close if there currently is no node being built.
Examples
use syntree::{Builder, Error};
let mut tree = Builder::new();
tree.open("root")?;
tree.close()?;
// Syntax::Root and Syntax::Child is left open.
assert_eq!(tree.close(), Err(Error::CloseError));
BuildError
Error raised by Builder::build if the tree isn’t correctly balanced.
Examples
use syntree::{Builder, Error};
let mut tree = Builder::new();
tree.open("number")?;
tree.token("lit", 3)?;
tree.close()?;
tree.open("number")?;
// Syntax::Number is left open.
assert_eq!(tree.build(), Err(Error::BuildError));
CloseAtError
Error raised by Builder::close_at if we’re not trying to close at a sibling node.
Examples
use syntree::{Builder, Error};
let mut tree = Builder::new();
let c = tree.checkpoint()?;
tree.open("child")?;
tree.token("token", 3)?;
assert_eq!(tree.close_at(&c, "operation"), Err(Error::CloseAtError));
Overflow
Numerical overflow.
This only happens under extreme circumstances or if a feature is enabled which narrows the width of an identifier to the degree that this error is easier to accomplish.
Examples
This is an example where we’re trying to build a really small tree using u8 pointers:
use syntree::{Builder, Error};
let mut tree: Builder<_, u32, u8> = Builder::new_with();
for d in 0..u8::MAX {
tree.token(d, 1)?;
}
assert_eq!(tree.token(255, 1), Err(Error::Overflow));
MissingNode(usize)
The node of the given id is missing.
Examples
The following showcases what could happen if you mix checkpoints from two compatible trees:
use syntree::{Builder, Error};
let mut a = Builder::new();
let mut b = Builder::new();
b.open("child")?;
b.close()?;
let c = b.checkpoint()?;
assert_eq!(a.close_at(&c, "operation"), Err(Error::MissingNode(0)));
Trait Implementations§
source§impl Error for Error
impl Error for Error
1.30.0 · source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
The lower-level source of this error, if any. Read more
1.0.0 · source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()