pub struct BuildError { /* private fields */ }Expand description
An error that occurred during the construction of a DFA.
This error does not provide many introspection capabilities. There are generally only two things you can do with it:
- Obtain a human readable message via its
std::fmt::Displayimpl. - Access an underlying
nfa::thompson::BuildErrortype from itssourcemethod via thestd::error::Errortrait. This error only occurs when using convenience routines for building a DFA directly from a pattern string.
When the std feature is enabled, this implements the std::error::Error
trait.
Implementations§
Source§impl BuildError
impl BuildError
Sourcepub fn is_size_limit_exceeded(&self) -> bool
pub fn is_size_limit_exceeded(&self) -> bool
Returns true if and only if this error corresponds to an error with DFA construction that occurred because of exceeding a size limit.
While this can occur when size limits like Config::dfa_size_limit
or Config::determinize_size_limit are exceeded, this can also occur
when the number of states or patterns exceeds a hard-coded maximum.
(Where these maximums are derived based on the values representable by
StateID and PatternID.)
This predicate is useful in contexts where you want to distinguish between errors related to something provided by an end user (for example, an invalid regex pattern) and errors related to configured heuristics. For example, building a DFA might be an optimization that you want to skip if construction fails because of an exceeded size limit, but where you want to bubble up an error if it fails for some other reason.
§Example
use regex_automata::{dfa::{dense, Automaton}, Input};
let err = dense::Builder::new()
.configure(dense::Config::new()
.determinize_size_limit(Some(100_000))
)
.build(r"\w{20}")
.unwrap_err();
// This error occurs because a size limit was exceeded.
// But things are otherwise valid.
assert!(err.is_size_limit_exceeded());
let err = dense::Builder::new()
.build(r"\bxyz\b")
.unwrap_err();
// This error occurs because a Unicode word boundary
// was used without enabling heuristic support for it.
// So... not related to size limits.
assert!(!err.is_size_limit_exceeded());
let err = dense::Builder::new()
.build(r"(xyz")
.unwrap_err();
// This error occurs because the pattern is invalid.
// So... not related to size limits.
assert!(!err.is_size_limit_exceeded());
Trait Implementations§
Source§impl Clone for BuildError
impl Clone for BuildError
Source§fn clone(&self) -> BuildError
fn clone(&self) -> BuildError
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more