pub fn make_union_array(
union_fields: UnionFields,
children: Vec<ArrayRef>,
) -> Result<ArrayRef, ArrowError>Examples found in repository?
examples/impl.rs (lines 39-46)
36 fn try_into_arrow(self) -> arrow::error::Result<arrow::array::ArrayRef> {
37 let union_fields = get_union_fields::<Self>()?;
38
39 make_union_array(
40 union_fields,
41 vec![
42 self.name.try_into_arrow()?,
43 self.width.try_into_arrow()?,
44 self.height.try_into_arrow()?,
45 ],
46 )
47 }
48}
49
50impl TryFrom<ArrayData> for Metadata {
51 type Error = arrow::error::ArrowError;
52
53 fn try_from(data: ArrayData) -> arrow::error::Result<Self> {
54 Metadata::try_from_arrow(data)
55 }
56}
57
58impl TryFrom<Metadata> for ArrayData {
59 type Error = arrow::error::ArrowError;
60
61 fn try_from(metadata: Metadata) -> arrow::error::Result<Self> {
62 metadata.try_into_arrow().map(|array| array.into_data())
63 }
64}
65
66#[derive(Debug)]
67struct Image {
68 data: UInt8Array,
69 metadata: Option<Metadata>,
70}
71
72impl ArrowMessage for Image {
73 fn field(name: impl Into<String>) -> Field {
74 make_union_fields(
75 name,
76 vec![
77 UInt8Array::field("data"),
78 Option::<Metadata>::field("metadata"),
79 ],
80 )
81 }
82
83 fn try_from_arrow(data: arrow::array::ArrayData) -> arrow::error::Result<Self>
84 where
85 Self: Sized,
86 {
87 let (map, children) = unpack_union(data);
88
89 Ok(Image {
90 data: extract_union_data("data", &map, &children)?,
91 metadata: extract_union_data("metadata", &map, &children)?,
92 })
93 }
94
95 fn try_into_arrow(self) -> arrow::error::Result<arrow::array::ArrayRef> {
96 let union_fields = get_union_fields::<Self>()?;
97
98 make_union_array(
99 union_fields,
100 vec![self.data.try_into_arrow()?, self.metadata.try_into_arrow()?],
101 )
102 }More examples
examples/enum_impl.rs (lines 104-112)
101 fn try_into_arrow(self) -> arrow::error::Result<arrow::array::ArrayRef> {
102 let union_fields = get_union_fields::<Self>()?;
103
104 make_union_array(
105 union_fields,
106 vec![
107 self.name.try_into_arrow()?,
108 self.width.try_into_arrow()?,
109 self.height.try_into_arrow()?,
110 self.encoding.try_into_arrow()?,
111 ],
112 )
113 }
114}
115
116impl TryFrom<ArrayData> for Metadata {
117 type Error = arrow::error::ArrowError;
118
119 fn try_from(data: ArrayData) -> arrow::error::Result<Self> {
120 Metadata::try_from_arrow(data)
121 }
122}
123
124impl TryFrom<Metadata> for ArrayData {
125 type Error = arrow::error::ArrowError;
126
127 fn try_from(metadata: Metadata) -> arrow::error::Result<Self> {
128 metadata.try_into_arrow().map(|array| array.into_data())
129 }
130}
131
132#[derive(Debug)]
133struct Image {
134 data: UInt8Array,
135 metadata: Option<Metadata>,
136}
137
138impl ArrowMessage for Image {
139 fn field(name: impl Into<String>) -> Field {
140 make_union_fields(
141 name,
142 vec![
143 UInt8Array::field("data"),
144 Option::<Metadata>::field("metadata"),
145 ],
146 )
147 }
148
149 fn try_from_arrow(data: arrow::array::ArrayData) -> arrow::error::Result<Self>
150 where
151 Self: Sized,
152 {
153 let (map, children) = unpack_union(data);
154
155 Ok(Image {
156 data: extract_union_data("data", &map, &children)?,
157 metadata: extract_union_data("metadata", &map, &children)?,
158 })
159 }
160
161 fn try_into_arrow(self) -> arrow::error::Result<arrow::array::ArrayRef> {
162 let union_fields = get_union_fields::<Self>()?;
163
164 make_union_array(
165 union_fields,
166 vec![self.data.try_into_arrow()?, self.metadata.try_into_arrow()?],
167 )
168 }