openvm_stark_sdk/dummy_airs/fib_air/
columns.rs

1use core::borrow::Borrow;
2
3pub const NUM_FIBONACCI_COLS: usize = 2;
4
5#[repr(C)]
6pub struct FibonacciCols<F> {
7    pub left: F,
8    pub right: F,
9}
10
11impl<F> FibonacciCols<F> {
12    pub const fn new(left: F, right: F) -> FibonacciCols<F> {
13        FibonacciCols { left, right }
14    }
15}
16
17// Manual implementation of AlignedBorrow to avoid circular git import
18impl<F> Borrow<FibonacciCols<F>> for [F] {
19    fn borrow(&self) -> &FibonacciCols<F> {
20        debug_assert_eq!(self.len(), NUM_FIBONACCI_COLS);
21        let (prefix, shorts, suffix) = unsafe { self.align_to::<FibonacciCols<F>>() };
22        debug_assert!(prefix.is_empty(), "Alignment should match");
23        debug_assert!(suffix.is_empty(), "Alignment should match");
24        debug_assert_eq!(shorts.len(), 1);
25        &shorts[0]
26    }
27}