An issue I have been running into a lot with rust is that I need to add additional functionality (such as additional methods, traits, or related data) to structures from external dependencies.
From what I can tell, your options for doing this are:
Extension Trait: This works if you just need to add some additional methods, but you can't add your own fields, you can't add private methods, and obviously it doesn't help with adding traits (such as Eq/Ord, for an obvious example) so it's only viable for a small subset of the problem. It also results in unnecessary boilerplate since you have to stub out all your methods in the trait definition even though you obviously never want anyone writing their own impls for your trait.
Wrapper struct: You can add your own traits, methods, and fields, but you've created a new type so you can't directly use it anywhere you'd normally use the underlying type, and accessing methods and fields of the underlying type are also not ergonomic. It seems you can use Deref/DerefMut to be able to pass the wrapper type, where the underlying type is needed, but this only works with references and seems to be frowned on by the community. For accessing underlying methods you can also use macros to generate delegate functions for accessing underlying methods but that doesn't help with fields.
Neither of these options provide a complete solution. Coming from an OO background, this is incredibly frustrating since this seems like a fairly common problem and in an OO language it can usually be easily solved with inheritance. Am I missing something big here or is Rust just really lousy in this area?