make_union_array

Function make_union_array 

Source
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
Hide additional 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    }