diff --git a/src/net.rs b/src/net.rs index c5fabf0c..63acf3c0 100644 --- a/src/net.rs +++ b/src/net.rs @@ -105,12 +105,20 @@ impl<'a> Writer for &'a mut NetworkStream { fn flush(&mut self) -> IoResult<()> { (**self).flush() } } -impl UncheckedBoxAnyDowncast for Box { - unsafe fn downcast_unchecked(self) -> Box { - let to = *mem::transmute::<&Box, &raw::TraitObject>(&self); - // Prevent double-free. - mem::forget(self); - mem::transmute(to.data) +impl UnsafeAnyExt for NetworkStream + Send { + unsafe fn downcast_ref_unchecked(&self) -> &T { + mem::transmute(mem::transmute::<&NetworkStream + Send, + raw::TraitObject>(self).data) + } + + unsafe fn downcast_mut_unchecked(&mut self) -> &mut T { + mem::transmute(mem::transmute::<&mut NetworkStream + Send, + raw::TraitObject>(self).data) + } + + unsafe fn downcast_unchecked(self: Box) -> Box { + mem::transmute(mem::transmute::, + raw::TraitObject>(self).data) } }