How to do a std::any::Any::downcast(Box) or return Box?
⚓ Rust 📅 2026-01-07 👤 surdeus 👁️ 1How to handle downcasting such that in case of failure i can return argument that was passed in function call?
Code available in playground.
struct Obj;
fn cast_or_return(initial_obj: Box<dyn MyTrait>) -> Result<Box<Obj>, Box<dyn MyTrait>> {
let any_obj: Box<dyn Any> = initial_obj;
match any_obj.downcast::<Obj>() {
| Ok(done) => {
Ok(done)
}
| Err(another_obj) => {
// How to upcast back to initial_object?
let cast_back: Box<dyn MyTrait> = another_obj;
Err(cast_back)
//Ok(Box::new(Obj))
}
}
}
fn main() {
let o: Box<dyn MyTrait> = Box::new(Obj);
cast_or_return(o).ok();
}
use std::any::Any;
trait MyTrait: Any {}
impl MyTrait for Obj {}
I just can't come up with any sane way to solve this. Any ideas would be appreciated.
4 posts - 2 participants
🏷️ Rust_feed