1use std::sync::Arc;
5
6use crate::IndexType;
7use lance_table::format::IndexMetadata;
8use roaring::RoaringBitmap;
9use uuid::Uuid;
10
11#[derive(Debug, Clone, PartialEq)]
17pub struct IndexSegment {
18 uuid: Uuid,
20 fragment_bitmap: RoaringBitmap,
22 index_details: Arc<prost_types::Any>,
24 index_version: i32,
26}
27
28impl IndexSegment {
29 pub fn new<I>(
32 uuid: Uuid,
33 fragment_bitmap: I,
34 index_details: Arc<prost_types::Any>,
35 index_version: i32,
36 ) -> Self
37 where
38 I: IntoIterator<Item = u32>,
39 {
40 Self {
41 uuid,
42 fragment_bitmap: fragment_bitmap.into_iter().collect(),
43 index_details,
44 index_version,
45 }
46 }
47
48 pub fn uuid(&self) -> Uuid {
50 self.uuid
51 }
52
53 pub fn fragment_bitmap(&self) -> &RoaringBitmap {
55 &self.fragment_bitmap
56 }
57
58 pub fn index_details(&self) -> &Arc<prost_types::Any> {
60 &self.index_details
61 }
62
63 pub fn index_version(&self) -> i32 {
65 self.index_version
66 }
67
68 pub fn into_parts(self) -> (Uuid, RoaringBitmap, Arc<prost_types::Any>, i32) {
70 (
71 self.uuid,
72 self.fragment_bitmap,
73 self.index_details,
74 self.index_version,
75 )
76 }
77}
78
79#[derive(Debug, Clone, PartialEq)]
82pub struct IndexSegmentPlan {
83 segment: IndexSegment,
84 segments: Vec<IndexMetadata>,
85 estimated_bytes: u64,
86 requested_index_type: Option<IndexType>,
87}
88
89impl IndexSegmentPlan {
90 pub fn new(
92 segment: IndexSegment,
93 segments: Vec<IndexMetadata>,
94 estimated_bytes: u64,
95 requested_index_type: Option<IndexType>,
96 ) -> Self {
97 Self {
98 segment,
99 segments,
100 estimated_bytes,
101 requested_index_type,
102 }
103 }
104
105 pub fn segment(&self) -> &IndexSegment {
107 &self.segment
108 }
109
110 pub fn segments(&self) -> &[IndexMetadata] {
112 &self.segments
113 }
114
115 pub fn estimated_bytes(&self) -> u64 {
117 self.estimated_bytes
118 }
119
120 pub fn requested_index_type(&self) -> Option<IndexType> {
122 self.requested_index_type
123 }
124}