use std::fmt;
use reifydb_type::value::{
container::{
blob::BlobContainer, bool::BoolContainer, number::NumberContainer, row::RowNumberContainer,
temporal::TemporalContainer, utf8::Utf8Container, uuid::UuidContainer,
},
is::{IsNumber, IsTemporal, IsUuid},
};
pub trait ContainerCapacity {
fn with_capacity(capacity: usize) -> Self;
fn clear(&mut self);
fn capacity(&self) -> usize;
}
impl ContainerCapacity for BoolContainer {
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}
impl<T> ContainerCapacity for NumberContainer<T>
where
T: IsNumber + Clone + fmt::Debug + Default,
{
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}
impl ContainerCapacity for Utf8Container {
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}
impl<T> ContainerCapacity for TemporalContainer<T>
where
T: IsTemporal + Clone + fmt::Debug + Default,
{
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}
impl<T> ContainerCapacity for UuidContainer<T>
where
T: IsUuid + Clone + fmt::Debug + Default,
{
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}
impl ContainerCapacity for BlobContainer {
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}
impl ContainerCapacity for RowNumberContainer {
fn with_capacity(capacity: usize) -> Self {
Self::with_capacity(capacity)
}
fn clear(&mut self) {
let capacity = self.capacity();
*self = Self::with_capacity(capacity);
}
fn capacity(&self) -> usize {
self.capacity()
}
}