typed_arrow/bridge/
binary.rs1use arrow_array::{
4 builder::{BinaryBuilder, FixedSizeBinaryBuilder, LargeBinaryBuilder},
5 FixedSizeBinaryArray, LargeBinaryArray,
6};
7use arrow_schema::DataType;
8
9use super::ArrowBinding;
10
11impl ArrowBinding for Vec<u8> {
13 type Builder = BinaryBuilder;
14 type Array = arrow_array::BinaryArray;
15 fn data_type() -> DataType {
16 DataType::Binary
17 }
18 fn new_builder(capacity: usize) -> Self::Builder {
19 BinaryBuilder::with_capacity(capacity, 0)
20 }
21 fn append_value(b: &mut Self::Builder, v: &Self) {
22 b.append_value(v.as_slice());
23 }
24 fn append_null(b: &mut Self::Builder) {
25 b.append_null();
26 }
27 fn finish(mut b: Self::Builder) -> Self::Array {
28 b.finish()
29 }
30}
31
32impl<const N: usize> super::ArrowBinding for [u8; N] {
34 type Builder = FixedSizeBinaryBuilder;
35 type Array = FixedSizeBinaryArray;
36 fn data_type() -> DataType {
37 DataType::FixedSizeBinary(i32::try_from(N).expect("width fits i32"))
38 }
39 fn new_builder(capacity: usize) -> Self::Builder {
40 FixedSizeBinaryBuilder::with_capacity(capacity, i32::try_from(N).expect("width fits i32"))
41 }
42 fn append_value(b: &mut Self::Builder, v: &Self) {
43 let _ = b.append_value(v);
44 }
45 fn append_null(b: &mut Self::Builder) {
46 b.append_null();
47 }
48 fn finish(mut b: Self::Builder) -> Self::Array {
49 b.finish()
50 }
51}
52
53pub struct LargeBinary(Vec<u8>);
56
57impl LargeBinary {
58 #[inline]
60 #[must_use]
61 pub fn new(value: Vec<u8>) -> Self {
62 Self(value)
63 }
64 #[inline]
66 #[must_use]
67 pub fn as_slice(&self) -> &[u8] {
68 self.0.as_slice()
69 }
70 #[inline]
72 #[must_use]
73 pub fn into_vec(self) -> Vec<u8> {
74 self.0
75 }
76}
77
78impl From<Vec<u8>> for LargeBinary {
79 #[inline]
80 fn from(value: Vec<u8>) -> Self {
81 Self::new(value)
82 }
83}
84
85impl ArrowBinding for LargeBinary {
86 type Builder = LargeBinaryBuilder;
87 type Array = LargeBinaryArray;
88 fn data_type() -> DataType {
89 DataType::LargeBinary
90 }
91 fn new_builder(capacity: usize) -> Self::Builder {
92 LargeBinaryBuilder::with_capacity(capacity, 0)
93 }
94 fn append_value(b: &mut Self::Builder, v: &Self) {
95 b.append_value(v.0.as_slice());
96 }
97 fn append_null(b: &mut Self::Builder) {
98 b.append_null();
99 }
100 fn finish(mut b: Self::Builder) -> Self::Array {
101 b.finish()
102 }
103}