use std::sync::Arc;
use crate::IndexType;
use lance_table::format::IndexMetadata;
use roaring::RoaringBitmap;
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq)]
pub struct IndexSegment {
uuid: Uuid,
fragment_bitmap: RoaringBitmap,
index_details: Arc<prost_types::Any>,
index_version: i32,
}
impl IndexSegment {
pub fn new<I>(
uuid: Uuid,
fragment_bitmap: I,
index_details: Arc<prost_types::Any>,
index_version: i32,
) -> Self
where
I: IntoIterator<Item = u32>,
{
Self {
uuid,
fragment_bitmap: fragment_bitmap.into_iter().collect(),
index_details,
index_version,
}
}
pub fn uuid(&self) -> Uuid {
self.uuid
}
pub fn fragment_bitmap(&self) -> &RoaringBitmap {
&self.fragment_bitmap
}
pub fn index_details(&self) -> &Arc<prost_types::Any> {
&self.index_details
}
pub fn index_version(&self) -> i32 {
self.index_version
}
pub fn into_parts(self) -> (Uuid, RoaringBitmap, Arc<prost_types::Any>, i32) {
(
self.uuid,
self.fragment_bitmap,
self.index_details,
self.index_version,
)
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct IndexSegmentPlan {
segment: IndexSegment,
segments: Vec<IndexMetadata>,
estimated_bytes: u64,
requested_index_type: Option<IndexType>,
}
impl IndexSegmentPlan {
pub fn new(
segment: IndexSegment,
segments: Vec<IndexMetadata>,
estimated_bytes: u64,
requested_index_type: Option<IndexType>,
) -> Self {
Self {
segment,
segments,
estimated_bytes,
requested_index_type,
}
}
pub fn segment(&self) -> &IndexSegment {
&self.segment
}
pub fn segments(&self) -> &[IndexMetadata] {
&self.segments
}
pub fn estimated_bytes(&self) -> u64 {
self.estimated_bytes
}
pub fn requested_index_type(&self) -> Option<IndexType> {
self.requested_index_type
}
}