I am looking for advice on a modelling a ownership relation in Rust.
For context, this is for an implementation of a version control system. A
Repository needs to have a
Status but deriving a
Status requires calling on methods from
I've created a minimal example here: https://gist.github.com/samrat/bd5e7896a7d9e83bbe78ed6839efb3f3 The codebase I'm actually working on is also available here: https://github.com/samrat/rug/blob/master/src/repository/status.rs
The proper modeling of the domain would be for a Repository to have a Status field. But because some Status methods call Repository methods, I have had to make Repository a field in Status instead.(which I've marked HACKY in the gist above)
This means that the struct that owns Repository now owns a Status and methods in the parent struct call Repository methods look like
I should also point out that my modelling might have been a bit prejudiced by a Ruby implementation that I am referencing: https://github.com/jcoglan/jit/blob/master/lib/repository.rb#L58 -- in this project Repository passes
self to the child Status which uses that to call on Repository methods.