use crate::{buffer::BufferType, validity::Validity};
pub trait Nullability: sealed::Sealed {
const NULLABLE: bool;
type Item<T>;
type Collection<T, Buffer: BufferType>;
}
mod sealed {
pub trait Sealed {}
impl<T> Sealed for T where T: super::Nullability {}
}
#[derive(Clone, Copy, Debug)]
pub struct Nullable;
impl Nullability for Nullable {
const NULLABLE: bool = true;
type Item<T> = Option<T>;
type Collection<T, Buffer: BufferType> = Validity<T, Buffer>;
}
#[derive(Clone, Copy, Debug)]
pub struct NonNullable;
impl Nullability for NonNullable {
const NULLABLE: bool = false;
type Item<T> = T;
type Collection<T, Buffer: BufferType> = T;
}