#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::fmt::Debug; use std::any::Any; fn log(value: &T) { let value_any = value as &dyn Any; match value_any.downcast_ref::() { Some(as_string) => { println!("String ({}): {}", as_string.len(), as_string); } None => { println!("{value:?}"); } } } fn do_work(value: &T) { log(value); } fn main() { let my_string = "Hello World".to_string(); do_work(&my_string); let my_i8: i8 = 100; do_work(&my_i8); }