Merge remote-tracking branch 'origin/upstream' am: a2909347ec am: 5fe8da383f am: c4b16643db

Original change: undetermined

Change-Id: Ie02586c332c75fe37163311575ebf728ae90c99f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
tree: ff176214b85e9271e57b726f443643ddc3042b27
  1. examples/
  2. src/
  3. tests/
  4. .cargo_vcs_info.json
  5. .gitattributes
  6. .gitignore
  7. Android.bp
  8. Cargo.toml
  9. cargo_embargo.json
  10. clippy.toml
  11. LICENSE-MIT
  12. METADATA
  13. MODULE_LICENSE_MIT
  14. OWNERS
  15. README.md
README.md

downcast   Latest Version

A trait (& utilities) for downcasting trait objects back to their original types.

link to API documentation

example usage

Add to your Cargo.toml:

[dependencies]
downcast = "0.12"

Add to your crate root:

#[macro_use]
extern crate downcast;
  • simple showcases the most simple usage of this library.
  • with_params showcases how to deal with traits who have type parameters.
  • sync_service showcases how to downcast Arc-pointers.

build features

  • std (default) enables all functionality requiring the standard library (Downcast::downcast()).
  • nightly enables all functionality requiring rust nightly (Any::type_name()).

faq

Q: I'm getting the size for values of type XXX cannot be known at compile time errors, what am i doing wrong?

A: Make sure you use the corresponding Any bound along with the Downcast traits. So, Any for Downcast and AnySync for DowncastSync.

Q: Can i cast trait objects to trait objects?

A: No, that is currently no possible in safe rust - and unsafe solutions are very tricky, as well. If you found a solution, feel free to share it!

Q: What is the difference between this and the downcast-rs crate on crates.io?

A: At the moment, there isn't one, really. There was an unfortunate naming clash. You may consider using the other crate, as it is more actively maintained. This one is considered feature-complete and frozen in functionality. Hopefully, one day, the Rust language will make downcasting easier and we will need neither of these crates anymore!