The Rust backend currently inline child datatypes into their parent, leading to giant to_arrow_datatype() that both bloat the code and are unreadable.
Replace the inlining with a runtime call to the child's to_arrow_datatype() method instead, akin to what we do on the serialization/deserialization path.