pub enum BasePattern {
Ignore,
Identifier(Identifier),
Product(Arc<Self>, Arc<Self>),
}Expand description
Basic structure of a SimplicityHL value for pattern matching.
Variants§
Ignore
Ignore: Match any value.
Used for matching values that are not assigned to a variable.
Identifier(Identifier)
Variable identifier: Match any value and bind it to an identifier.
Product(Arc<Self>, Arc<Self>)
Product: Match product value component-wise.
Implementations§
Source§impl BasePattern
impl BasePattern
Sourcepub fn product(left: Self, right: Self) -> Self
pub fn product(left: Self, right: Self) -> Self
Construct a product of patterns left and right.
Sourcepub fn as_identifier(&self) -> Option<&Identifier>
pub fn as_identifier(&self) -> Option<&Identifier>
Access the identifier inside an identifier pattern.
Sourcepub fn contains(&self, identifier: &Identifier) -> bool
pub fn contains(&self, identifier: &Identifier) -> bool
Check if the identifier is contained inside the pattern.
Sourcepub fn subsumes(&self, other: &Self) -> bool
pub fn subsumes(&self, other: &Self) -> bool
Check if self subsumes the other pattern.
§Subsumption
- Ignore:
_subsumes every pattern. - Identifier:
asubsumesbiffa=b - Product:
(a1, a2)subsumes(b1, b2)iffa1subsumesb1anda2subsumesb2.
§Matching
If value v matches pattern p and pattern p' subsumes p,
then v matches p'.
The subsuming pattern is more general than the subsumed pattern.
Sourcepub fn identifiers(&self) -> impl Iterator<Item = &Identifier>
pub fn identifiers(&self) -> impl Iterator<Item = &Identifier>
Get an iterator over all identifiers inside the pattern.
Sourcepub fn contains_all<'a, I>(&self, identifiers: I) -> boolwhere
I: Iterator<Item = &'a Identifier>,
pub fn contains_all<'a, I>(&self, identifiers: I) -> boolwhere
I: Iterator<Item = &'a Identifier>,
Check if all identifiers are contained inside the pattern.
Sourcepub fn covers(&self, other: &Self) -> bool
pub fn covers(&self, other: &Self) -> bool
Check if self covers the other pattern in terms of variable names.
§Coverage
Pattern p1 covers pattern p2 if p1 contains all variable names from p2.
Sourcepub fn contains_ignore(&self) -> bool
pub fn contains_ignore(&self) -> bool
Check if the pattern contains an ignore pattern.
Sourcepub fn translate<'brand, P: CoreExt<'brand>>(
&self,
ctx: &Context<'brand>,
to: &Self,
) -> Option<PairBuilder<P>>
pub fn translate<'brand, P: CoreExt<'brand>>( &self, ctx: &Context<'brand>, to: &Self, ) -> Option<PairBuilder<P>>
Compute a Simplicity expression that takes as input a value that matches the self pattern
and that produces as output a value that matches the to pattern.
§Panics
The to pattern contains ignore patterns: Every value matches the ignore pattern.
This means there are infinitely many translating expressions from self to to.
For instance, iden, iden & iden, (iden & iden) & iden, and so on.
We enforce a unique translation by banning ignore from the to pattern.
Trait Implementations§
Source§impl Clone for BasePattern
impl Clone for BasePattern
Source§fn clone(&self) -> BasePattern
fn clone(&self) -> BasePattern
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BasePattern
impl Debug for BasePattern
impl Eq for BasePattern
Source§impl From<&Pattern> for BasePattern
impl From<&Pattern> for BasePattern
Source§impl Hash for BasePattern
impl Hash for BasePattern
Source§impl PartialEq for BasePattern
impl PartialEq for BasePattern
impl StructuralPartialEq for BasePattern
Source§impl TreeLike for &BasePattern
impl TreeLike for &BasePattern
Source§fn n_children(&self) -> usize
fn n_children(&self) -> usize
Source§fn nth_child(&self, n: usize) -> Option<Self>
fn nth_child(&self, n: usize) -> Option<Self>
Source§fn pre_order_iter(self) -> PreOrderIter<Self> ⓘ
fn pre_order_iter(self) -> PreOrderIter<Self> ⓘ
Source§fn verbose_pre_order_iter(self) -> VerbosePreOrderIter<Self> ⓘ
fn verbose_pre_order_iter(self) -> VerbosePreOrderIter<Self> ⓘ
Source§fn post_order_iter(self) -> PostOrderIter<Self> ⓘ
fn post_order_iter(self) -> PostOrderIter<Self> ⓘ
Auto Trait Implementations§
impl Freeze for BasePattern
impl RefUnwindSafe for BasePattern
impl Send for BasePattern
impl Sync for BasePattern
impl Unpin for BasePattern
impl UnsafeUnpin for BasePattern
impl UnwindSafe for BasePattern
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T> OrderedSeq<'_, T> for Twhere
T: Clone,
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);