diff --git a/crates/re_types/source_hash.txt b/crates/re_types/source_hash.txt index 33d988d4e9a4..53094a35fa6b 100644 --- a/crates/re_types/source_hash.txt +++ b/crates/re_types/source_hash.txt @@ -1,4 +1,4 @@ # This is a sha256 hash for all direct and indirect dependencies of this crate's build script. # It can be safely removed at anytime to force the build script to run again. # Check out build.rs to see how it's computed. -6d87389cbdb8ab099fa99159ded37aeefd43d592dce6d01cca1e7b89b155a63e +4e7bff9578be94c0d8e42808d39c49e58b03a4b6dd5dd571dbf87ed7640fcca4 diff --git a/crates/re_types_builder/src/codegen/cpp/mod.rs b/crates/re_types_builder/src/codegen/cpp/mod.rs index 564fc75eb229..9786c93c6719 100644 --- a/crates/re_types_builder/src/codegen/cpp/mod.rs +++ b/crates/re_types_builder/src/codegen/cpp/mod.rs @@ -585,7 +585,7 @@ fn arrow_data_type_method( cpp_includes.system.insert("arrow/api.h".to_owned()); hpp_includes.system.insert("memory".to_owned()); // std::shared_ptr - let quoted_datatype = ArrowDataTypeTokenizer(datatype); + let quoted_datatype = quote_arrow_data_type(datatype, cpp_includes, true); Method { doc_string: "Returns the arrow data type this type corresponds to.".to_owned(), @@ -833,95 +833,102 @@ fn quote_integer(t: T) -> TokenStream { // --- Arrow registry code generators --- -struct ArrowDataTypeTokenizer<'a>(&'a ::arrow2::datatypes::DataType); - -impl quote::ToTokens for ArrowDataTypeTokenizer<'_> { - fn to_tokens(&self, tokens: &mut TokenStream) { - use arrow2::datatypes::UnionMode; - match self.0.to_logical_type() { - DataType::Null => quote!(arrow::null()), - DataType::Boolean => quote!(arrow::boolean()), - DataType::Int8 => quote!(arrow::int8()), - DataType::Int16 => quote!(arrow::int16()), - DataType::Int32 => quote!(arrow::int32()), - DataType::Int64 => quote!(arrow::int64()), - DataType::UInt8 => quote!(arrow::uint8()), - DataType::UInt16 => quote!(arrow::uint16()), - DataType::UInt32 => quote!(arrow::uint32()), - DataType::UInt64 => quote!(arrow::uint64()), - DataType::Float16 => quote!(arrow::float16()), - DataType::Float32 => quote!(arrow::float32()), - DataType::Float64 => quote!(arrow::float64()), - DataType::Binary => quote!(arrow::binary()), - DataType::LargeBinary => quote!(arrow::large_binary()), - DataType::Utf8 => quote!(arrow::utf8()), - DataType::LargeUtf8 => quote!(arrow::large_utf8()), - - DataType::List(field) => { - let field = ArrowFieldTokenizer(field); - quote!(arrow::list(#field)) - } +fn quote_arrow_data_type( + datatype: &::arrow2::datatypes::DataType, + includes: &mut Includes, + is_top_level_type: bool, +) -> TokenStream { + use arrow2::datatypes::UnionMode; + match datatype { + DataType::Null => quote!(arrow::null()), + DataType::Boolean => quote!(arrow::boolean()), + DataType::Int8 => quote!(arrow::int8()), + DataType::Int16 => quote!(arrow::int16()), + DataType::Int32 => quote!(arrow::int32()), + DataType::Int64 => quote!(arrow::int64()), + DataType::UInt8 => quote!(arrow::uint8()), + DataType::UInt16 => quote!(arrow::uint16()), + DataType::UInt32 => quote!(arrow::uint32()), + DataType::UInt64 => quote!(arrow::uint64()), + DataType::Float16 => quote!(arrow::float16()), + DataType::Float32 => quote!(arrow::float32()), + DataType::Float64 => quote!(arrow::float64()), + DataType::Binary => quote!(arrow::binary()), + DataType::LargeBinary => quote!(arrow::large_binary()), + DataType::Utf8 => quote!(arrow::utf8()), + DataType::LargeUtf8 => quote!(arrow::large_utf8()), + + DataType::List(field) => { + let quoted_field = quote_arrow_field(field, includes); + quote!(arrow::list(#quoted_field)) + } - DataType::FixedSizeList(field, length) => { - let field = ArrowFieldTokenizer(field); - let length = quote_integer(length); - quote!(arrow::fixed_size_list(#field, #length)) - } + DataType::FixedSizeList(field, length) => { + let quoted_field = quote_arrow_field(field, includes); + let quoted_length = quote_integer(length); + quote!(arrow::fixed_size_list(#quoted_field, #quoted_length)) + } - DataType::Union(fields, _, mode) => { - let fields = fields.iter().map(ArrowFieldTokenizer); - match mode { - UnionMode::Dense => { - quote! { arrow::dense_union({ #(#fields,)* }) } - } - UnionMode::Sparse => { - quote! { arrow::sparse_union({ #(#fields,)* }) } - } + DataType::Union(fields, _, mode) => { + let quoted_fields = fields + .iter() + .map(|field| quote_arrow_field(field, includes)); + match mode { + UnionMode::Dense => { + quote! { arrow::dense_union({ #(#quoted_fields,)* }) } + } + UnionMode::Sparse => { + quote! { arrow::sparse_union({ #(#quoted_fields,)* }) } } } + } - DataType::Struct(fields) => { - let fields = fields.iter().map(ArrowFieldTokenizer); - quote! { arrow::struct_({ #(#fields,)* }) } - } + DataType::Struct(fields) => { + let fields = fields + .iter() + .map(|field| quote_arrow_field(field, includes)); + quote! { arrow::struct_({ #(#fields,)* }) } + } - DataType::Extension(_name, _datatype, _metadata) => { - // TODO(andreas): Need this eventually. - unimplemented!("Arrow extension types not yet implemented"); + DataType::Extension(fqname, datatype, _metadata) => { + // If we're not at the top level, we should have already a `to_arrow_datatype` method that we can relay to. + // TODO(andreas): Unions don't have `to_arrow_datatype` yet. + if is_top_level_type || matches!(datatype.as_ref(), DataType::Union(..)) { + // TODO(andreas): We're no`t emitting the actual extension types here yet which is why we're skipping the extension type at top level. + // Currently, we wrap only Components in extension types but this is done in `rerun_c`. + // In the future we'll add the extension type here to the schema. + quote_arrow_data_type(datatype, includes, false) + } else { + let fqname_use = quote_fqname_as_type_path(includes, fqname); + quote! { #fqname_use::to_arrow_datatype() } } - - _ => unimplemented!("{:#?}", self.0), } - .to_tokens(tokens); + + _ => unimplemented!("{:#?}", datatype), } } -struct ArrowFieldTokenizer<'a>(&'a ::arrow2::datatypes::Field); - -impl quote::ToTokens for ArrowFieldTokenizer<'_> { - fn to_tokens(&self, tokens: &mut TokenStream) { - let arrow2::datatypes::Field { - name, - data_type, - is_nullable, - metadata, - } = &self.0; +fn quote_arrow_field(field: &::arrow2::datatypes::Field, includes: &mut Includes) -> TokenStream { + let arrow2::datatypes::Field { + name, + data_type, + is_nullable, + metadata, + } = field; - let datatype = ArrowDataTypeTokenizer(data_type); - - let metadata = if metadata.is_empty() { - quote!(nullptr) - } else { - let keys = metadata.keys(); - let values = metadata.values(); - quote! { - arrow::KeyValueMetadata::Make({ #(#keys,)* }, { #(#values,)* }) - } - }; + let datatype = quote_arrow_data_type(data_type, includes, false); + let metadata = if metadata.is_empty() { + quote!(nullptr) + } else { + let keys = metadata.keys(); + let values = metadata.values(); quote! { - arrow::field(#name, #datatype, #is_nullable, #metadata) + arrow::KeyValueMetadata::Make({ #(#keys,)* }, { #(#values,)* }) } - .to_tokens(tokens); + }; + + quote! { + arrow::field(#name, #datatype, #is_nullable, #metadata) } } diff --git a/rerun_cpp/src/components/affix_fuzzer1.cpp b/rerun_cpp/src/components/affix_fuzzer1.cpp index acd9d26614b0..16cdc62bf8b0 100644 --- a/rerun_cpp/src/components/affix_fuzzer1.cpp +++ b/rerun_cpp/src/components/affix_fuzzer1.cpp @@ -3,36 +3,13 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer1.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer1::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }); + return rr::datatypes::AffixFuzzer1::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer14.cpp b/rerun_cpp/src/components/affix_fuzzer14.cpp index 9276f9a33a3d..6c72132b69c2 100644 --- a/rerun_cpp/src/components/affix_fuzzer14.cpp +++ b/rerun_cpp/src/components/affix_fuzzer14.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer14.hpp" namespace rr { @@ -15,38 +16,7 @@ namespace rr { arrow::field( "craziness", arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field( - "almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), + "item", rr::datatypes::AffixFuzzer1::to_arrow_datatype(), false, nullptr)), false, nullptr), arrow::field("fixed_size_shenanigans", diff --git a/rerun_cpp/src/components/affix_fuzzer15.cpp b/rerun_cpp/src/components/affix_fuzzer15.cpp index 744aa883ee29..387c780b912e 100644 --- a/rerun_cpp/src/components/affix_fuzzer15.cpp +++ b/rerun_cpp/src/components/affix_fuzzer15.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer15.hpp" namespace rr { @@ -15,38 +16,7 @@ namespace rr { arrow::field( "craziness", arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field( - "almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), + "item", rr::datatypes::AffixFuzzer1::to_arrow_datatype(), false, nullptr)), false, nullptr), arrow::field("fixed_size_shenanigans", diff --git a/rerun_cpp/src/components/affix_fuzzer16.cpp b/rerun_cpp/src/components/affix_fuzzer16.cpp index 4012674112d7..b6bdd725f0c6 100644 --- a/rerun_cpp/src/components/affix_fuzzer16.cpp +++ b/rerun_cpp/src/components/affix_fuzzer16.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer16.hpp" namespace rr { @@ -16,42 +17,10 @@ namespace rr { arrow::field("radians", arrow::float32(), false, nullptr), arrow::field( "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field( - "single_float_optional", arrow::float32(), true, nullptr), - arrow::field( - "single_string_required", arrow::utf8(), false, nullptr), - arrow::field( - "single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field( - "almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), + arrow::list(arrow::field("item", + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), + false, + nullptr)), false, nullptr), arrow::field("fixed_size_shenanigans", diff --git a/rerun_cpp/src/components/affix_fuzzer17.cpp b/rerun_cpp/src/components/affix_fuzzer17.cpp index 82d45b1a4480..7de3bb0389d4 100644 --- a/rerun_cpp/src/components/affix_fuzzer17.cpp +++ b/rerun_cpp/src/components/affix_fuzzer17.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer17.hpp" namespace rr { @@ -16,42 +17,10 @@ namespace rr { arrow::field("radians", arrow::float32(), false, nullptr), arrow::field( "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field( - "single_float_optional", arrow::float32(), true, nullptr), - arrow::field( - "single_string_required", arrow::utf8(), false, nullptr), - arrow::field( - "single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field( - "almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), + arrow::list(arrow::field("item", + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), + false, + nullptr)), false, nullptr), arrow::field("fixed_size_shenanigans", diff --git a/rerun_cpp/src/components/affix_fuzzer18.cpp b/rerun_cpp/src/components/affix_fuzzer18.cpp index b6fce50f5a99..4fcea9734206 100644 --- a/rerun_cpp/src/components/affix_fuzzer18.cpp +++ b/rerun_cpp/src/components/affix_fuzzer18.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer18.hpp" namespace rr { @@ -18,56 +19,14 @@ namespace rr { arrow::field("_null_markers", arrow::null(), true, nullptr), arrow::field("degrees", arrow::float32(), false, nullptr), arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field( - "flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), + arrow::field("craziness", + arrow::list(arrow::field( + "item", + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), + false, + nullptr)), + false, + nullptr), arrow::field( "fixed_size_shenanigans", arrow::fixed_size_list( @@ -85,60 +44,14 @@ namespace rr { arrow::field("_null_markers", arrow::null(), true, nullptr), arrow::field("degrees", arrow::float32(), false, nullptr), arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), + arrow::field("craziness", + arrow::list(arrow::field( + "item", + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), + false, + nullptr)), + false, + nullptr), arrow::field( "fixed_size_shenanigans", arrow::fixed_size_list( @@ -158,60 +71,14 @@ namespace rr { arrow::field("_null_markers", arrow::null(), true, nullptr), arrow::field("degrees", arrow::float32(), false, nullptr), arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), + arrow::field("craziness", + arrow::list(arrow::field( + "item", + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), + false, + nullptr)), + false, + nullptr), arrow::field( "fixed_size_shenanigans", arrow::fixed_size_list( diff --git a/rerun_cpp/src/components/affix_fuzzer19.cpp b/rerun_cpp/src/components/affix_fuzzer19.cpp index 744daff2763f..d9b6cdf964b5 100644 --- a/rerun_cpp/src/components/affix_fuzzer19.cpp +++ b/rerun_cpp/src/components/affix_fuzzer19.cpp @@ -3,239 +3,13 @@ #include +#include "../datatypes/affix_fuzzer5.hpp" #include "affix_fuzzer19.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer19::to_arrow_datatype() { - return arrow::struct_({ - arrow::field( - "single_optional_union", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field( - "single_required", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("degrees", arrow::float32(), false, nullptr), - arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), - arrow::field( - "fixed_size_shenanigans", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "many_required", - arrow::list(arrow::field( - "item", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("degrees", arrow::float32(), false, nullptr), - arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), - arrow::field( - "fixed_size_shenanigans", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), - 3), - false, - nullptr), - }), - false, - nullptr)), - false, - nullptr), - arrow::field( - "many_optional", - arrow::list(arrow::field( - "item", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("degrees", arrow::float32(), false, nullptr), - arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), - arrow::field( - "fixed_size_shenanigans", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), - 3), - false, - nullptr), - }), - true, - nullptr)), - false, - nullptr), - }), - true, - nullptr), - }); + return rr::datatypes::AffixFuzzer5::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer2.cpp b/rerun_cpp/src/components/affix_fuzzer2.cpp index 68dd68c04d8c..e17f1ab888c5 100644 --- a/rerun_cpp/src/components/affix_fuzzer2.cpp +++ b/rerun_cpp/src/components/affix_fuzzer2.cpp @@ -3,36 +3,13 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer2.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer2::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }); + return rr::datatypes::AffixFuzzer1::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer3.cpp b/rerun_cpp/src/components/affix_fuzzer3.cpp index bd23ffde1d8a..4466312d5bd2 100644 --- a/rerun_cpp/src/components/affix_fuzzer3.cpp +++ b/rerun_cpp/src/components/affix_fuzzer3.cpp @@ -3,36 +3,13 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer3.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer3::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }); + return rr::datatypes::AffixFuzzer1::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer4.cpp b/rerun_cpp/src/components/affix_fuzzer4.cpp index 49a65c69c65c..f18449ebd610 100644 --- a/rerun_cpp/src/components/affix_fuzzer4.cpp +++ b/rerun_cpp/src/components/affix_fuzzer4.cpp @@ -3,36 +3,13 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer4.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer4::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }); + return rr::datatypes::AffixFuzzer1::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer5.cpp b/rerun_cpp/src/components/affix_fuzzer5.cpp index 8537430fc4a2..7832efcf5687 100644 --- a/rerun_cpp/src/components/affix_fuzzer5.cpp +++ b/rerun_cpp/src/components/affix_fuzzer5.cpp @@ -3,36 +3,13 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer5.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer5::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }); + return rr::datatypes::AffixFuzzer1::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer6.cpp b/rerun_cpp/src/components/affix_fuzzer6.cpp index 62f13dc33eda..258a348ecf04 100644 --- a/rerun_cpp/src/components/affix_fuzzer6.cpp +++ b/rerun_cpp/src/components/affix_fuzzer6.cpp @@ -3,36 +3,13 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer6.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer6::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }); + return rr::datatypes::AffixFuzzer1::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/affix_fuzzer7.cpp b/rerun_cpp/src/components/affix_fuzzer7.cpp index d0875bcae85c..cdae9a510bcb 100644 --- a/rerun_cpp/src/components/affix_fuzzer7.cpp +++ b/rerun_cpp/src/components/affix_fuzzer7.cpp @@ -3,40 +3,14 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer7.hpp" namespace rr { namespace components { std::shared_ptr AffixFuzzer7::to_arrow_datatype() { return arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", arrow::float32(), true, nullptr), - arrow::field("single_string_required", arrow::utf8(), false, nullptr), - arrow::field("single_string_optional", arrow::utf8(), true, nullptr), - arrow::field("many_floats_optional", - arrow::list(arrow::field("item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field("many_strings_required", - arrow::list(arrow::field("item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field("item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", arrow::float32(), false, nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), - false, - nullptr), - arrow::field("from_parent", arrow::boolean(), true, nullptr), - }), - true, - nullptr)); + "item", rr::datatypes::AffixFuzzer1::to_arrow_datatype(), true, nullptr)); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/point2d.cpp b/rerun_cpp/src/components/point2d.cpp index 7a810c27cec2..63e54c44d802 100644 --- a/rerun_cpp/src/components/point2d.cpp +++ b/rerun_cpp/src/components/point2d.cpp @@ -3,15 +3,13 @@ #include +#include "../datatypes/point2d.hpp" #include "point2d.hpp" namespace rr { namespace components { std::shared_ptr Point2D::to_arrow_datatype() { - return arrow::struct_({ - arrow::field("x", arrow::float32(), false, nullptr), - arrow::field("y", arrow::float32(), false, nullptr), - }); + return rr::datatypes::Point2D::to_arrow_datatype(); } } // namespace components } // namespace rr diff --git a/rerun_cpp/src/components/transform3d.cpp b/rerun_cpp/src/components/transform3d.cpp index 6127dbba9e50..07ef4bf62b0e 100644 --- a/rerun_cpp/src/components/transform3d.cpp +++ b/rerun_cpp/src/components/transform3d.cpp @@ -3,6 +3,8 @@ #include +#include "../datatypes/translation_and_mat3x3.hpp" +#include "../datatypes/translation_rotation_scale3d.hpp" #include "transform3d.hpp" namespace rr { @@ -10,88 +12,14 @@ namespace rr { std::shared_ptr Transform3D::to_arrow_datatype() { return arrow::dense_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field( - "TranslationAndMat3x3", - arrow::struct_({ - arrow::field("translation", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - true, - nullptr), - arrow::field("matrix", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 9), - true, - nullptr), - arrow::field("from_parent", arrow::boolean(), false, nullptr), - }), - false, - nullptr), - arrow::field( - "TranslationRotationScale", - arrow::struct_({ - arrow::field("translation", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - true, - nullptr), - arrow::field( - "rotation", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field( - "Quaternion", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 4), - false, - nullptr), - arrow::field( - "AxisAngle", - arrow::struct_({ - arrow::field( - "axis", - arrow::fixed_size_list( - arrow::field( - "item", arrow::float32(), false, nullptr), - 3), - false, - nullptr), - arrow::field( - "angle", - arrow::dense_union({ - arrow::field( - "_null_markers", arrow::null(), true, nullptr), - arrow::field( - "Radians", arrow::float32(), false, nullptr), - arrow::field( - "Degrees", arrow::float32(), false, nullptr), - }), - false, - nullptr), - }), - false, - nullptr), - }), - true, - nullptr), - arrow::field( - "scale", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field( - "ThreeD", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - false, - nullptr), - arrow::field("Uniform", arrow::float32(), false, nullptr), - }), - true, - nullptr), - arrow::field("from_parent", arrow::boolean(), false, nullptr), - }), - false, - nullptr), + arrow::field("TranslationAndMat3x3", + rr::datatypes::TranslationAndMat3x3::to_arrow_datatype(), + false, + nullptr), + arrow::field("TranslationRotationScale", + rr::datatypes::TranslationRotationScale3D::to_arrow_datatype(), + false, + nullptr), }); } } // namespace components diff --git a/rerun_cpp/src/datatypes/affix_fuzzer1.cpp b/rerun_cpp/src/datatypes/affix_fuzzer1.cpp index d3906895e234..5373a2f5cc2d 100644 --- a/rerun_cpp/src/datatypes/affix_fuzzer1.cpp +++ b/rerun_cpp/src/datatypes/affix_fuzzer1.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/flattened_scalar.hpp" #include "affix_fuzzer1.hpp" namespace rr { @@ -26,9 +27,7 @@ namespace rr { nullptr), arrow::field("flattened_scalar", arrow::float32(), false, nullptr), arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", arrow::float32(), false, nullptr), - }), + rr::datatypes::FlattenedScalar::to_arrow_datatype(), false, nullptr), arrow::field("from_parent", arrow::boolean(), true, nullptr), diff --git a/rerun_cpp/src/datatypes/affix_fuzzer5.cpp b/rerun_cpp/src/datatypes/affix_fuzzer5.cpp index 3f824c583f2b..0947453c6205 100644 --- a/rerun_cpp/src/datatypes/affix_fuzzer5.cpp +++ b/rerun_cpp/src/datatypes/affix_fuzzer5.cpp @@ -3,6 +3,7 @@ #include +#include "../datatypes/affix_fuzzer1.hpp" #include "affix_fuzzer5.hpp" namespace rr { @@ -19,60 +20,14 @@ namespace rr { arrow::field("_null_markers", arrow::null(), true, nullptr), arrow::field("degrees", arrow::float32(), false, nullptr), arrow::field("radians", arrow::float32(), false, nullptr), - arrow::field( - "craziness", - arrow::list(arrow::field( - "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field("many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), - false, - nullptr)), - false, - nullptr), + arrow::field("craziness", + arrow::list(arrow::field( + "item", + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), + false, + nullptr)), + false, + nullptr), arrow::field( "fixed_size_shenanigans", arrow::fixed_size_list( @@ -94,53 +49,7 @@ namespace rr { "craziness", arrow::list(arrow::field( "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), false, nullptr)), false, @@ -169,53 +78,7 @@ namespace rr { "craziness", arrow::list(arrow::field( "item", - arrow::struct_({ - arrow::field("single_float_optional", - arrow::float32(), - true, - nullptr), - arrow::field("single_string_required", - arrow::utf8(), - false, - nullptr), - arrow::field("single_string_optional", - arrow::utf8(), - true, - nullptr), - arrow::field( - "many_floats_optional", - arrow::list(arrow::field( - "item", arrow::float32(), true, nullptr)), - true, - nullptr), - arrow::field( - "many_strings_required", - arrow::list(arrow::field( - "item", arrow::utf8(), false, nullptr)), - false, - nullptr), - arrow::field( - "many_strings_optional", - arrow::list(arrow::field( - "item", arrow::utf8(), true, nullptr)), - true, - nullptr), - arrow::field("flattened_scalar", - arrow::float32(), - false, - nullptr), - arrow::field("almost_flattened_scalar", - arrow::struct_({ - arrow::field("value", - arrow::float32(), - false, - nullptr), - }), - false, - nullptr), - arrow::field( - "from_parent", arrow::boolean(), true, nullptr), - }), + rr::datatypes::AffixFuzzer1::to_arrow_datatype(), false, nullptr)), false, diff --git a/rerun_cpp/src/datatypes/rotation_axis_angle.cpp b/rerun_cpp/src/datatypes/rotation_axis_angle.cpp index 8efa7c970b65..75094c0db866 100644 --- a/rerun_cpp/src/datatypes/rotation_axis_angle.cpp +++ b/rerun_cpp/src/datatypes/rotation_axis_angle.cpp @@ -3,17 +3,14 @@ #include +#include "../datatypes/vec3d.hpp" #include "rotation_axis_angle.hpp" namespace rr { namespace datatypes { std::shared_ptr RotationAxisAngle::to_arrow_datatype() { return arrow::struct_({ - arrow::field("axis", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - false, - nullptr), + arrow::field("axis", rr::datatypes::Vec3D::to_arrow_datatype(), false, nullptr), arrow::field("angle", arrow::dense_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), diff --git a/rerun_cpp/src/datatypes/translation_and_mat3x3.cpp b/rerun_cpp/src/datatypes/translation_and_mat3x3.cpp index ed8ddec2f813..578f42beaeb4 100644 --- a/rerun_cpp/src/datatypes/translation_and_mat3x3.cpp +++ b/rerun_cpp/src/datatypes/translation_and_mat3x3.cpp @@ -3,22 +3,17 @@ #include +#include "../datatypes/mat3x3.hpp" +#include "../datatypes/vec3d.hpp" #include "translation_and_mat3x3.hpp" namespace rr { namespace datatypes { std::shared_ptr TranslationAndMat3x3::to_arrow_datatype() { return arrow::struct_({ - arrow::field("translation", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - true, - nullptr), - arrow::field("matrix", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 9), - true, - nullptr), + arrow::field( + "translation", rr::datatypes::Vec3D::to_arrow_datatype(), true, nullptr), + arrow::field("matrix", rr::datatypes::Mat3x3::to_arrow_datatype(), true, nullptr), arrow::field("from_parent", arrow::boolean(), false, nullptr), }); } diff --git a/rerun_cpp/src/datatypes/translation_rotation_scale3d.cpp b/rerun_cpp/src/datatypes/translation_rotation_scale3d.cpp index b827d5e36730..7191975370c9 100644 --- a/rerun_cpp/src/datatypes/translation_rotation_scale3d.cpp +++ b/rerun_cpp/src/datatypes/translation_rotation_scale3d.cpp @@ -3,59 +3,37 @@ #include +#include "../datatypes/quaternion.hpp" +#include "../datatypes/rotation_axis_angle.hpp" +#include "../datatypes/vec3d.hpp" #include "translation_rotation_scale3d.hpp" namespace rr { namespace datatypes { std::shared_ptr TranslationRotationScale3D::to_arrow_datatype() { return arrow::struct_({ - arrow::field("translation", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), + arrow::field( + "translation", rr::datatypes::Vec3D::to_arrow_datatype(), true, nullptr), + arrow::field("rotation", + arrow::dense_union({ + arrow::field("_null_markers", arrow::null(), true, nullptr), + arrow::field("Quaternion", + rr::datatypes::Quaternion::to_arrow_datatype(), + false, + nullptr), + arrow::field("AxisAngle", + rr::datatypes::RotationAxisAngle::to_arrow_datatype(), + false, + nullptr), + }), true, nullptr), - arrow::field( - "rotation", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("Quaternion", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 4), - false, - nullptr), - arrow::field( - "AxisAngle", - arrow::struct_({ - arrow::field( - "axis", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - false, - nullptr), - arrow::field( - "angle", - arrow::dense_union({ - arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("Radians", arrow::float32(), false, nullptr), - arrow::field("Degrees", arrow::float32(), false, nullptr), - }), - false, - nullptr), - }), - false, - nullptr), - }), - true, - nullptr), arrow::field( "scale", arrow::dense_union({ arrow::field("_null_markers", arrow::null(), true, nullptr), - arrow::field("ThreeD", - arrow::fixed_size_list( - arrow::field("item", arrow::float32(), false, nullptr), 3), - false, - nullptr), + arrow::field( + "ThreeD", rr::datatypes::Vec3D::to_arrow_datatype(), false, nullptr), arrow::field("Uniform", arrow::float32(), false, nullptr), }), true,