This is not a core Tvix tool, it's a tool that uses a Tvix component. Change-Id: I705f2c4ab87f1512e005007c933e16b84ed4279f Reviewed-on: https://cl.tvl.fyi/c/depot/+/12605 Reviewed-by: edef <edef@edef.eu> Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su>
27 lines
716 B
Rust
27 lines
716 B
Rust
use owning_ref::{OwningRef, StableAddress};
|
|
use polars::export::arrow::buffer::Buffer;
|
|
use std::ops::Deref;
|
|
|
|
/// An shared `[[u8; N]]` backed by a Polars [Buffer].
|
|
pub type FixedBytes<const N: usize> = OwningRef<Bytes, [[u8; N]]>;
|
|
|
|
/// Wrapper struct to make [Buffer] implement [StableAddress].
|
|
/// TODO(edef): upstream the `impl`
|
|
pub struct Bytes(pub Buffer<u8>);
|
|
|
|
/// SAFETY: [Buffer] is always an Arc+Vec indirection.
|
|
unsafe impl StableAddress for Bytes {}
|
|
|
|
impl Bytes {
|
|
pub fn map<U: ?Sized>(self, f: impl FnOnce(&[u8]) -> &U) -> OwningRef<Self, U> {
|
|
OwningRef::new(self).map(f)
|
|
}
|
|
}
|
|
|
|
impl Deref for Bytes {
|
|
type Target = [u8];
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
&*self.0
|
|
}
|
|
}
|