binius_math/
packing_deref.rs1use std::{marker::PhantomData, ops::Deref};
4
5use binius_field::{
6 as_packed_field::{PackScalar, PackedType},
7 underlier::{UnderlierType, WithUnderlier},
8 Field,
9};
10
11#[derive(Debug, Clone)]
13pub struct PackingDeref<U, F, Data>(Data, PhantomData<F>)
14where
15 Data: Deref<Target = [U]>;
16
17impl<U, F, Data> PackingDeref<U, F, Data>
18where
19 Data: Deref<Target = [U]>,
20{
21 pub const fn new(data: Data) -> Self {
22 Self(data, PhantomData)
23 }
24}
25
26impl<U, F, Data> Deref for PackingDeref<U, F, Data>
27where
28 U: UnderlierType + PackScalar<F>,
29 F: Field,
30 Data: Deref<Target = [U]>,
31{
32 type Target = [PackedType<U, F>];
33
34 fn deref(&self) -> &Self::Target {
35 <PackedType<U, F>>::from_underliers_ref(&self.0)
36 }
37}