pub struct SqlFixedBytes<const BYTES: usize>(/* private fields */);
Expand description
A wrapper around FixedBytes
that provides a SQL-compatible type for fixed-size byte arrays.
Implementations§
Source§impl<const BYTES: usize> SqlFixedBytes<BYTES>
impl<const BYTES: usize> SqlFixedBytes<BYTES>
Sourcepub fn inner(&self) -> &FixedBytes<BYTES>
pub fn inner(&self) -> &FixedBytes<BYTES>
Returns a reference to the inner FixedBytes<BYTES>
.
Sourcepub const fn from_bytes(bytes: FixedBytes<BYTES>) -> Self
pub const fn from_bytes(bytes: FixedBytes<BYTES>) -> Self
Creates a new SqlFixedBytes
from a FixedBytes<BYTES>
.
Sourcepub fn to_address(&self) -> Option<SqlAddress>
pub fn to_address(&self) -> Option<SqlAddress>
Attempts to interpret the fixed bytes as an Ethereum address (last 20 bytes). Returns None if the length is not 32 or the prefix is not zeroed.
Methods from Deref<Target = FixedBytes<BYTES>>§
pub const ZERO: FixedBytes<N>
Sourcepub fn as_slice(&self) -> &[u8] ⓘ
pub fn as_slice(&self) -> &[u8] ⓘ
Returns a slice containing the entire array. Equivalent to &s[..]
.
Sourcepub fn covers(&self, other: &FixedBytes<N>) -> bool
pub fn covers(&self, other: &FixedBytes<N>) -> bool
Returns true
if all bits set in self
are also set in b
.
Sourcepub fn const_eq(&self, other: &FixedBytes<N>) -> bool
pub fn const_eq(&self, other: &FixedBytes<N>) -> bool
Compile-time equality. NOT constant-time equality.
Sourcepub fn const_is_zero(&self) -> bool
pub fn const_is_zero(&self) -> bool
Returns true
if no bits are set.
Methods from Deref<Target = [u8; N]>§
Sourcepub fn as_ascii(&self) -> Option<&[AsciiChar; N]>
🔬This is a nightly-only experimental API. (ascii_char
)
pub fn as_ascii(&self) -> Option<&[AsciiChar; N]>
ascii_char
)Converts this array of bytes into an array of ASCII characters,
or returns None
if any of the characters is non-ASCII.
§Examples
#![feature(ascii_char)]
const HEX_DIGITS: [std::ascii::Char; 16] =
*b"0123456789abcdef".as_ascii().unwrap();
assert_eq!(HEX_DIGITS[1].as_str(), "1");
assert_eq!(HEX_DIGITS[10].as_str(), "a");
Sourcepub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar; N]
🔬This is a nightly-only experimental API. (ascii_char
)
pub unsafe fn as_ascii_unchecked(&self) -> &[AsciiChar; N]
ascii_char
)Converts this array of bytes into an array of ASCII characters, without checking whether they’re valid.
§Safety
Every byte in the array must be in 0..=127
, or else this is UB.
1.57.0 · Sourcepub fn as_slice(&self) -> &[T]
pub fn as_slice(&self) -> &[T]
Returns a slice containing the entire array. Equivalent to &s[..]
.
1.57.0 · Sourcepub fn as_mut_slice(&mut self) -> &mut [T]
pub fn as_mut_slice(&mut self) -> &mut [T]
Returns a mutable slice containing the entire array. Equivalent to
&mut s[..]
.
1.77.0 · Sourcepub fn each_ref(&self) -> [&T; N]
pub fn each_ref(&self) -> [&T; N]
Borrows each element and returns an array of references with the same
size as self
.
§Example
let floats = [3.1, 2.7, -1.0];
let float_refs: [&f64; 3] = floats.each_ref();
assert_eq!(float_refs, [&3.1, &2.7, &-1.0]);
This method is particularly useful if combined with other methods, like
map
. This way, you can avoid moving the original
array if its elements are not Copy
.
let strings = ["Ferris".to_string(), "♥".to_string(), "Rust".to_string()];
let is_ascii = strings.each_ref().map(|s| s.is_ascii());
assert_eq!(is_ascii, [true, false, true]);
// We can still access the original array: it has not been moved.
assert_eq!(strings.len(), 3);
1.77.0 · Sourcepub fn each_mut(&mut self) -> [&mut T; N]
pub fn each_mut(&mut self) -> [&mut T; N]
Borrows each element mutably and returns an array of mutable references
with the same size as self
.
§Example
let mut floats = [3.1, 2.7, -1.0];
let float_refs: [&mut f64; 3] = floats.each_mut();
*float_refs[0] = 0.0;
assert_eq!(float_refs, [&mut 0.0, &mut 2.7, &mut -1.0]);
assert_eq!(floats, [0.0, 2.7, -1.0]);
Sourcepub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])
🔬This is a nightly-only experimental API. (split_array
)
pub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])
split_array
)Divides one array reference into two at an index.
The first will contain all indices from [0, M)
(excluding
the index M
itself) and the second will contain all
indices from [M, N)
(excluding the index N
itself).
§Panics
Panics if M > N
.
§Examples
#![feature(split_array)]
let v = [1, 2, 3, 4, 5, 6];
{
let (left, right) = v.split_array_ref::<0>();
assert_eq!(left, &[]);
assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}
{
let (left, right) = v.split_array_ref::<2>();
assert_eq!(left, &[1, 2]);
assert_eq!(right, &[3, 4, 5, 6]);
}
{
let (left, right) = v.split_array_ref::<6>();
assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
assert_eq!(right, &[]);
}
Sourcepub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T])
🔬This is a nightly-only experimental API. (split_array
)
pub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T])
split_array
)Divides one mutable array reference into two at an index.
The first will contain all indices from [0, M)
(excluding
the index M
itself) and the second will contain all
indices from [M, N)
(excluding the index N
itself).
§Panics
Panics if M > N
.
§Examples
#![feature(split_array)]
let mut v = [1, 0, 3, 0, 5, 6];
let (left, right) = v.split_array_mut::<2>();
assert_eq!(left, &mut [1, 0][..]);
assert_eq!(right, &mut [3, 0, 5, 6]);
left[1] = 2;
right[1] = 4;
assert_eq!(v, [1, 2, 3, 4, 5, 6]);
Sourcepub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])
🔬This is a nightly-only experimental API. (split_array
)
pub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])
split_array
)Divides one array reference into two at an index from the end.
The first will contain all indices from [0, N - M)
(excluding
the index N - M
itself) and the second will contain all
indices from [N - M, N)
(excluding the index N
itself).
§Panics
Panics if M > N
.
§Examples
#![feature(split_array)]
let v = [1, 2, 3, 4, 5, 6];
{
let (left, right) = v.rsplit_array_ref::<0>();
assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
assert_eq!(right, &[]);
}
{
let (left, right) = v.rsplit_array_ref::<2>();
assert_eq!(left, &[1, 2, 3, 4]);
assert_eq!(right, &[5, 6]);
}
{
let (left, right) = v.rsplit_array_ref::<6>();
assert_eq!(left, &[]);
assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}
Sourcepub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M])
🔬This is a nightly-only experimental API. (split_array
)
pub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M])
split_array
)Divides one mutable array reference into two at an index from the end.
The first will contain all indices from [0, N - M)
(excluding
the index N - M
itself) and the second will contain all
indices from [N - M, N)
(excluding the index N
itself).
§Panics
Panics if M > N
.
§Examples
#![feature(split_array)]
let mut v = [1, 0, 3, 0, 5, 6];
let (left, right) = v.rsplit_array_mut::<4>();
assert_eq!(left, &mut [1, 0]);
assert_eq!(right, &mut [3, 0, 5, 6][..]);
left[1] = 2;
right[1] = 4;
assert_eq!(v, [1, 2, 3, 4, 5, 6]);
Trait Implementations§
Source§impl<const BYTES: usize> AsRef<FixedBytes<BYTES>> for SqlFixedBytes<BYTES>
impl<const BYTES: usize> AsRef<FixedBytes<BYTES>> for SqlFixedBytes<BYTES>
Source§fn as_ref(&self) -> &FixedBytes<BYTES>
fn as_ref(&self) -> &FixedBytes<BYTES>
Source§impl<const BYTES: usize> Clone for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Clone for SqlFixedBytes<BYTES>
Source§fn clone(&self) -> SqlFixedBytes<BYTES>
fn clone(&self) -> SqlFixedBytes<BYTES>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<const BYTES: usize> Debug for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Debug for SqlFixedBytes<BYTES>
Source§impl<'a, DB: Database> Decode<'a, DB> for SqlFixedBytes<32>
Available on crate feature sqlx
only.
impl<'a, DB: Database> Decode<'a, DB> for SqlFixedBytes<32>
sqlx
only.Source§impl<const BYTES: usize> Default for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Default for SqlFixedBytes<BYTES>
Source§impl<const BYTES: usize> Deref for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Deref for SqlFixedBytes<BYTES>
Source§impl<'de, const BYTES: usize> Deserialize<'de> for SqlFixedBytes<BYTES>
impl<'de, const BYTES: usize> Deserialize<'de> for SqlFixedBytes<BYTES>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<const BYTES: usize> Display for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Display for SqlFixedBytes<BYTES>
Source§impl<'a, DB: Database> Encode<'a, DB> for SqlFixedBytes<32>
Available on crate feature sqlx
only.
impl<'a, DB: Database> Encode<'a, DB> for SqlFixedBytes<32>
sqlx
only.Source§fn encode_by_ref(
&self,
buf: &mut <DB as Database>::ArgumentBuffer<'a>,
) -> Result<IsNull, BoxDynError>
fn encode_by_ref( &self, buf: &mut <DB as Database>::ArgumentBuffer<'a>, ) -> Result<IsNull, BoxDynError>
Source§fn encode(
self,
buf: &mut <DB as Database>::ArgumentBuffer<'q>,
) -> Result<IsNull, Box<dyn Error + Sync + Send>>where
Self: Sized,
fn encode(
self,
buf: &mut <DB as Database>::ArgumentBuffer<'q>,
) -> Result<IsNull, Box<dyn Error + Sync + Send>>where
Self: Sized,
self
into buf
in the expected format for the database.fn produces(&self) -> Option<<DB as Database>::TypeInfo>
fn size_hint(&self) -> usize
Source§impl<const BYTES: usize> From<FixedBytes<BYTES>> for SqlFixedBytes<BYTES>
impl<const BYTES: usize> From<FixedBytes<BYTES>> for SqlFixedBytes<BYTES>
Source§fn from(bytes: FixedBytes<BYTES>) -> Self
fn from(bytes: FixedBytes<BYTES>) -> Self
Source§impl<const BYTES: usize> From<SqlFixedBytes<BYTES>> for FixedBytes<BYTES>
impl<const BYTES: usize> From<SqlFixedBytes<BYTES>> for FixedBytes<BYTES>
Source§fn from(sql_bytes: SqlFixedBytes<BYTES>) -> Self
fn from(sql_bytes: SqlFixedBytes<BYTES>) -> Self
Source§impl<const BYTES: usize> FromStr for SqlFixedBytes<BYTES>
impl<const BYTES: usize> FromStr for SqlFixedBytes<BYTES>
Source§impl<const BYTES: usize> Hash for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Hash for SqlFixedBytes<BYTES>
Source§impl<const BYTES: usize> Ord for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Ord for SqlFixedBytes<BYTES>
Source§fn cmp(&self, other: &SqlFixedBytes<BYTES>) -> Ordering
fn cmp(&self, other: &SqlFixedBytes<BYTES>) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl<const BYTES: usize> PartialEq for SqlFixedBytes<BYTES>
impl<const BYTES: usize> PartialEq for SqlFixedBytes<BYTES>
Source§impl<const BYTES: usize> PartialOrd for SqlFixedBytes<BYTES>
impl<const BYTES: usize> PartialOrd for SqlFixedBytes<BYTES>
Source§impl<const BYTES: usize> Serialize for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Serialize for SqlFixedBytes<BYTES>
Source§impl<DB: Database> Type<DB> for SqlFixedBytes<32>
Available on crate feature sqlx
only.for SqlFixedBytes<32>
impl<DB: Database> Type<DB> for SqlFixedBytes<32>
sqlx
only.for SqlFixedBytes<32>
impl<const BYTES: usize> Copy for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Eq for SqlFixedBytes<BYTES>
impl<const BYTES: usize> StructuralPartialEq for SqlFixedBytes<BYTES>
Auto Trait Implementations§
impl<const BYTES: usize> Freeze for SqlFixedBytes<BYTES>
impl<const BYTES: usize> RefUnwindSafe for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Send for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Sync for SqlFixedBytes<BYTES>
impl<const BYTES: usize> Unpin for SqlFixedBytes<BYTES>
impl<const BYTES: usize> UnwindSafe for SqlFixedBytes<BYTES>
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<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 more