Unfortunately you can’t do this as is; see the following questions:
There’s a problem with destruction order where the array could be destroyed before the references to elements of the array, in case your struct implemented
Drop. Thus Rust cannot guarantee memory safety.
A first, easy alternative would be to use shared pointers
std::rc::Rc to implement safely your flyweight pattern. The only drawback is runtime overhead. I wouldn’t mind finding another more complicated, possibly unsafe pattern, unless profiling explicitly blames the shared pointer design as a source of slowness.
Alternatively, you could replace references by indices to refer to elements in the array. Not very idiomatic Rust, but could be made to work easily. Drawbacks are: can panic if invalid index; runtime overhead of bounds checking (if you disable bound checking, this drawback morphs into “memory safety no longer guaranteed”).
I would go with Rc if possible.