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 Datums 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::RequestSource§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> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
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.Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
Source§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
Source§fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
fn follow_redirects(self) -> FollowRedirect<Self>where
Self: Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.