I'm not familiar with Rust, but I wonder how much copying this does for deeply nested types?
This code largely just copies pointers around.
And also what Steve said about Rust being rly rly smart, or at least move semantics opening the door for that.