From 9b407c3b815a7edc202b514f00a50223a6d671a0 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 5 Jun 2023 17:36:58 +0100 Subject: [PATCH] fmt --- src/main.rs | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main.rs b/src/main.rs index a622907..beb677c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,7 @@ - -use std::any::{Any,TypeId}; +use std::any::{Any, TypeId}; use std::sync::Arc; -use downcast_rs::{Downcast, DowncastSync, impl_downcast}; +use downcast_rs::{impl_downcast, Downcast, DowncastSync}; pub trait HasPseudoMethods: DowncastSync { fn get_caster(&self, tp: TypeId) -> Option<&'static dyn Any>; @@ -16,7 +15,9 @@ trait HasFeet { struct Frog; impl HasFeet for Frog { - fn how_many_feet(&self) -> usize { 4 } + fn how_many_feet(&self) -> usize { + 4 + } } impl HasPseudoMethods for Frog { @@ -24,20 +25,17 @@ impl HasPseudoMethods for Frog { // need a registry of cast-to-trait objects, similar to the existing dispatch // table. I'm not sure if that's needed. fn get_caster(&self, tp: TypeId) -> Option<&'static dyn Any> { - if tp == TypeId::of::< - &'static dyn HasFeet - >() { - static CASTER: fn(&dyn HasPseudoMethods) -> &dyn HasFeet - = |self_| { - let self_: &dyn Any = Downcast::as_any(self_); - let self_: &Frog = self_.downcast_ref().unwrap(); - let self_: &dyn HasFeet = self_ as _; - self_ - }; - - return Some(&CASTER); - } - None + if tp == TypeId::of::<&'static dyn HasFeet>() { + static CASTER: fn(&dyn HasPseudoMethods) -> &dyn HasFeet = |self_| { + let self_: &dyn Any = Downcast::as_any(self_); + let self_: &Frog = self_.downcast_ref().unwrap(); + let self_: &dyn HasFeet = self_ as _; + self_ + }; + + return Some(&CASTER); + } + None } } @@ -46,15 +44,17 @@ fn main() { let erased_frog: Arc = frog as _; let erased_frog: &dyn HasPseudoMethods = &*erased_frog; - let caster: &'static dyn Any - = erased_frog.get_caster(TypeId::of::<&'static dyn HasFeet>()).unwrap(); + let caster: &'static dyn Any = erased_frog + .get_caster(TypeId::of::<&'static dyn HasFeet>()) + .unwrap(); - let caster: &'static fn(&dyn HasPseudoMethods) -> &dyn HasFeet - = caster.downcast_ref().unwrap(); + let caster: &'static fn(&dyn HasPseudoMethods) -> &dyn HasFeet = caster.downcast_ref().unwrap(); let with_feet: &dyn HasFeet = caster(erased_frog); - - println!("A frog has {} feet and eats .", - with_feet.how_many_feet(),/* - eats_food.favorite_food()*/) + + println!( + "A frog has {} feet and eats .", + with_feet.how_many_feet(), /* + eats_food.favorite_food()*/ + ) } -- 2.30.2