pub struct Range<D> {
pub inner: Option<RangeInner<D>>,
}
Expand description
A range of values along the domain D
.
D
is generic to facilitate interoperating over multiple representation,
e.g. Datum
and mz_pgrepr::Value
. Because of the latter, we have to
“manually derive” traits over Range
.
Also notable, is that Datum
s themselves store ranges as
Range<DatumNested<'a>>
, which lets us avoid unnecessary boxing of the
range’s finite bounds, which are most often expressed as Datum
.
Fields§
§inner: Option<RangeInner<D>>
None value represents empty range
Implementations§
Source§impl<D> Range<D>
impl<D> Range<D>
Sourcepub fn new(inner: Option<(RangeLowerBound<D>, RangeUpperBound<D>)>) -> Range<D>
pub fn new(inner: Option<(RangeLowerBound<D>, RangeUpperBound<D>)>) -> Range<D>
Create a new range.
Note that when constructing Range<Datum<'a>>
, the range must still be
canonicalized. If this becomes a common operation, we should consider
addinga new_canonical
function that performs both steps.
Sourcepub fn internal_flag_bits(&self) -> u8
pub fn internal_flag_bits(&self) -> u8
Get the flag bits appropriate to use in our internal (i.e. row) encoding of range values.
Note that this differs from the flags appropriate to encode with
Postgres, which has UB_INFINITE
and LB_INCLUSIVE
in the alternate
position.
Sourcepub fn pg_flag_bits(&self) -> u8
pub fn pg_flag_bits(&self) -> u8
Get the flag bits appropriate to use in PG-compatible encodings of range values.
Note that this differs from the flags appropriate for our internal
encoding, which has UB_INFINITE
and LB_INCLUSIVE
in the alternate
position.
Sourcepub fn into_bounds<F, O>(self, conv: F) -> Range<O>where
F: Fn(D) -> O,
pub fn into_bounds<F, O>(self, conv: F) -> Range<O>where
F: Fn(D) -> O,
Converts self
from having bounds of type D
to type O
, converting
the current bounds using conv
.
Source§impl<'a, B: Copy + Ord + PartialOrd + Display + Debug> Range<B>
Range implementations meant to work with Range<Datum>
and Range<DatumNested>
.
impl<'a, B: Copy + Ord + PartialOrd + Display + Debug> Range<B>
Range implementations meant to work with Range<Datum>
and Range<DatumNested>
.
pub fn contains_elem<T: RangeOps<'a>>(&self, elem: &T) -> bool
pub fn contains_range(&self, other: &Range<B>) -> bool
pub fn overlaps(&self, other: &Range<B>) -> bool
pub fn before(&self, other: &Range<B>) -> bool
pub fn after(&self, other: &Range<B>) -> bool
pub fn overleft(&self, other: &Range<B>) -> bool
pub fn overright(&self, other: &Range<B>) -> bool
pub fn adjacent(&self, other: &Range<B>) -> bool
pub fn union(&self, other: &Range<B>) -> Result<Range<B>, InvalidRangeError>
pub fn intersection(&self, other: &Range<B>) -> Range<B>
pub fn difference( &self, other: &Range<B>, ) -> Result<Range<Datum<'a>>, InvalidRangeError>
Source§impl<'a> Range<Datum<'a>>
impl<'a> Range<Datum<'a>>
Sourcepub fn canonicalize(&mut self) -> Result<(), InvalidRangeError>
pub fn canonicalize(&mut self) -> Result<(), InvalidRangeError>
Canonicalize the range by PG’s heuristics, which are:
- Infinite bounds are always exclusive
- If type has step:
- Exclusive lower bounds are rewritten as inclusive += step
- Inclusive lower bounds are rewritten as exclusive += step
- Ranges are empty if lower >= upper after prev. step unless range type does not have step and both bounds are inclusive
§Panics
- If the upper and lower bounds are finite and of different types.
Trait Implementations§
Source§impl<'a, E> DatumType<'a, E> for Range<Datum<'a>>
impl<'a, E> DatumType<'a, E> for Range<Datum<'a>>
Source§impl<'a, E> DatumType<'a, E> for Range<DatumNested<'a>>
impl<'a, E> DatumType<'a, E> for Range<DatumNested<'a>>
Source§impl<'a, T: FromSql<'a>> FromSql<'a> for Range<T>
impl<'a, T: FromSql<'a>> FromSql<'a> for Range<T>
Source§fn from_sql(
ty: &PgType,
raw: &'a [u8],
) -> Result<Range<T>, Box<dyn Error + Sync + Send>>
fn from_sql( ty: &PgType, raw: &'a [u8], ) -> Result<Range<T>, Box<dyn Error + Sync + Send>>
Type
in its binary format. Read moreSource§fn accepts(ty: &PgType) -> bool
fn accepts(ty: &PgType) -> bool
Type
.Source§impl<D: Ord> Ord for Range<D>
impl<D: Ord> Ord for Range<D>
Source§impl<D: Ord + PartialOrd> PartialOrd for Range<D>
impl<D: Ord + PartialOrd> PartialOrd for Range<D>
impl<D: Copy> Copy for Range<D>
impl<D: Eq> Eq for Range<D>
Auto Trait Implementations§
impl<D> Freeze for Range<D>where
D: Freeze,
impl<D> RefUnwindSafe for Range<D>where
D: RefUnwindSafe,
impl<D> Send for Range<D>where
D: Send,
impl<D> Sync for Range<D>where
D: Sync,
impl<D> Unpin for Range<D>where
D: Unpin,
impl<D> UnwindSafe for Range<D>where
D: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
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<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> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
Source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
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>
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);
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PreferredContainer for T
impl<T> PreferredContainer for T
Source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
Source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.Source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.Source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
Source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.