vortex_flatbuffers/
lib.rs1#[cfg(feature = "array")]
6#[allow(clippy::all)]
7#[allow(clippy::derive_partial_eq_without_eq)]
8#[allow(clippy::many_single_char_names)]
9#[allow(clippy::unwrap_used)]
10#[allow(clippy::borrow_as_ptr)]
11#[allow(dead_code)]
12#[allow(non_snake_case)]
13#[allow(non_camel_case_types)]
14#[allow(unsafe_op_in_unsafe_fn)]
15#[allow(unused_imports)]
16#[allow(unused_lifetimes)]
17#[allow(unused_qualifications)]
18#[rustfmt::skip]
19#[path = "./generated/array.rs"]
20#[doc = include_str!("../flatbuffers/vortex-array/array.fbs")]
25pub mod array;
27
28#[cfg(feature = "dtype")]
29#[allow(clippy::all)]
30#[allow(clippy::derive_partial_eq_without_eq)]
31#[allow(clippy::many_single_char_names)]
32#[allow(clippy::unwrap_used)]
33#[allow(clippy::borrow_as_ptr)]
34#[allow(dead_code)]
35#[allow(non_snake_case)]
36#[allow(non_camel_case_types)]
37#[allow(unsafe_op_in_unsafe_fn)]
38#[allow(unused_imports)]
39#[allow(unused_lifetimes)]
40#[allow(unused_qualifications)]
41#[rustfmt::skip]
42#[path = "./generated/dtype.rs"]
43#[doc = include_str!("../flatbuffers/vortex-dtype/dtype.fbs")]
48pub mod dtype;
50
51#[cfg(feature = "file")]
52#[allow(clippy::all)]
53#[allow(clippy::derive_partial_eq_without_eq)]
54#[allow(clippy::many_single_char_names)]
55#[allow(clippy::unwrap_used)]
56#[allow(clippy::borrow_as_ptr)]
57#[allow(dead_code)]
58#[allow(non_snake_case)]
59#[allow(non_camel_case_types)]
60#[allow(unsafe_op_in_unsafe_fn)]
61#[allow(unused_imports)]
62#[allow(unused_lifetimes)]
63#[allow(unused_qualifications)]
64#[rustfmt::skip]
65#[path = "./generated/footer.rs"]
66#[doc = include_str!("../flatbuffers/vortex-file/footer.fbs")]
71pub mod footer;
73
74#[cfg(feature = "layout")]
75#[allow(clippy::all)]
76#[allow(clippy::derive_partial_eq_without_eq)]
77#[allow(clippy::many_single_char_names)]
78#[allow(clippy::unwrap_used)]
79#[allow(clippy::borrow_as_ptr)]
80#[allow(dead_code)]
81#[allow(non_snake_case)]
82#[allow(non_camel_case_types)]
83#[allow(unsafe_op_in_unsafe_fn)]
84#[allow(unused_imports)]
85#[allow(unused_lifetimes)]
86#[allow(unused_qualifications)]
87#[rustfmt::skip]
88#[path = "./generated/layout.rs"]
89#[doc = include_str!("../flatbuffers/vortex-layout/layout.fbs")]
94pub mod layout;
96
97#[cfg(feature = "ipc")]
98#[allow(clippy::all)]
99#[allow(clippy::derive_partial_eq_without_eq)]
100#[allow(clippy::many_single_char_names)]
101#[allow(clippy::unwrap_used)]
102#[allow(clippy::borrow_as_ptr)]
103#[allow(dead_code)]
104#[allow(non_snake_case)]
105#[allow(non_camel_case_types)]
106#[allow(unsafe_op_in_unsafe_fn)]
107#[allow(unused_imports)]
108#[allow(unused_lifetimes)]
109#[allow(unused_qualifications)]
110#[rustfmt::skip]
111#[path = "./generated/message.rs"]
112#[doc = include_str!("../flatbuffers/vortex-serde/message.fbs")]
117pub mod message;
119
120use flatbuffers::{FlatBufferBuilder, Follow, InvalidFlatbuffer, Verifiable, WIPOffset, root};
121use vortex_buffer::{ByteBuffer, ConstByteBuffer};
122
123pub type FlatBuffer = ConstByteBuffer<8>;
128
129pub trait FlatBufferRoot {}
130
131pub trait ReadFlatBuffer: Sized {
132 type Source<'a>: Verifiable + Follow<'a>;
133 type Error: From<InvalidFlatbuffer>;
134
135 fn read_flatbuffer<'buf>(
136 fb: &<Self::Source<'buf> as Follow<'buf>>::Inner,
137 ) -> Result<Self, Self::Error>;
138
139 fn read_flatbuffer_bytes<'buf>(bytes: &'buf [u8]) -> Result<Self, Self::Error>
140 where
141 <Self as ReadFlatBuffer>::Source<'buf>: 'buf,
142 {
143 let fb = root::<Self::Source<'buf>>(bytes)?;
144 Self::read_flatbuffer(&fb)
145 }
146}
147
148pub trait WriteFlatBuffer {
149 type Target<'a>;
150
151 fn write_flatbuffer<'fb>(
152 &self,
153 fbb: &mut FlatBufferBuilder<'fb>,
154 ) -> WIPOffset<Self::Target<'fb>>;
155}
156
157pub trait WriteFlatBufferExt: WriteFlatBuffer + FlatBufferRoot {
158 fn write_flatbuffer_bytes(&self) -> FlatBuffer;
160}
161
162impl<F: WriteFlatBuffer + FlatBufferRoot> WriteFlatBufferExt for F {
163 fn write_flatbuffer_bytes(&self) -> FlatBuffer {
164 let mut fbb = FlatBufferBuilder::new();
165 let root_offset = self.write_flatbuffer(&mut fbb);
166 fbb.finish_minimal(root_offset);
167 let (vec, start) = fbb.collapse();
168 let end = vec.len();
169 FlatBuffer::align_from(ByteBuffer::from(vec).slice(start..end))
170 }
171}