#downcast #trait-object #compile-time

no-std downcast

Trait for downcasting trait objects back to their original types

20 releases (11 breaking)

0.11.0 Nov 9, 2021
0.10.0 Feb 13, 2019
0.9.2 Feb 15, 2018
0.9.1 Sep 16, 2017
0.2.1 Oct 26, 2015

#288 in Rust patterns

Download history 186690/week @ 2023-06-07 181414/week @ 2023-06-14 189890/week @ 2023-06-21 181414/week @ 2023-06-28 185181/week @ 2023-07-05 203118/week @ 2023-07-12 196980/week @ 2023-07-19 203349/week @ 2023-07-26 216121/week @ 2023-08-02 196858/week @ 2023-08-09 204013/week @ 2023-08-16 207829/week @ 2023-08-23 199166/week @ 2023-08-30 217301/week @ 2023-09-06 217875/week @ 2023-09-13 216060/week @ 2023-09-20

897,849 downloads per month
Used in 515 crates (14 directly)

MIT license

301 lines

downcast   Latest Version

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

example usage

Add to your Cargo.toml:

downcast = "0.12"

Add to your crate root:

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()).


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!

No runtime deps