Trait arrow_buffer::ArrowNativeType
source · pub trait ArrowNativeType: Debug + Send + Sync + Copy + PartialOrd + Default + Sealed + 'static {
// Required methods
fn from_usize(_: usize) -> Option<Self>;
fn as_usize(self) -> usize;
fn usize_as(i: usize) -> Self;
fn to_usize(self) -> Option<usize>;
fn to_isize(self) -> Option<isize>;
// Provided methods
fn from_i32(_: i32) -> Option<Self> { ... }
fn from_i64(_: i64) -> Option<Self> { ... }
fn from_i128(_: i128) -> Option<Self> { ... }
}
Expand description
Trait expressing a Rust type that has the same in-memory representation
as Arrow. This includes i16
, f32
, but excludes bool
(which in arrow is represented in bits).
In little endian machines, types that implement ArrowNativeType
can be memcopied to arrow buffers
as is.
Transmute Safety
A type T implementing this trait means that any arbitrary slice of bytes of length and
alignment size_of::<T>()
can be safely interpreted as a value of that type without
being unsound, i.e. potentially resulting in undefined behaviour.
Note: in the case of floating point numbers this transmutation can result in a signalling NaN, which, whilst sound, can be unwieldy. In general, whilst it is perfectly sound to reinterpret bytes as different types using this trait, it is likely unwise. For more information see f32::from_bits and f64::from_bits.
Note: bool
is restricted to 0
or 1
, and so bool: !ArrowNativeType
Sealed
Due to the above restrictions, this trait is sealed to prevent accidental misuse
Required Methods§
sourcefn from_usize(_: usize) -> Option<Self>
fn from_usize(_: usize) -> Option<Self>
Convert native integer type from usize
Returns None
if Self
is not an integer or conversion would result
in truncation/overflow
Provided Methods§
sourcefn from_i32(_: i32) -> Option<Self>
fn from_i32(_: i32) -> Option<Self>
Option::Some
insteadConvert native type from i32.
Returns None
if Self
is not i32