//! Standard extensions to [`crate::rcore`]. pub mod atomic; pub mod cast; pub mod collections; pub mod inject; pub mod inlining; mod local_origin; pub mod nullable; pub mod point; pub mod singular; pub mod tracing; pub mod typeless; mod wrapped_origin; use std::{error::Error, fmt::Display, rc::Rc}; use crate::func::*; use crate::mode::*; use crate::rcore::*; impl Display for Address { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}@{}", hex::encode(self.point), self.index) } } /// Extension trait for [Serializable]s. pub trait SerializableExt: Serializable { /// Serialize into a [Vec] of bytes. fn bytes(&self) -> Vec; } impl SerializableExt for S { fn bytes(&self) -> Vec { let mut vec = Vec::new(); self.serialize(&mut vec); vec } } /// [`ResolverExt::into_rc`]. pub trait ResolverExt<'a, Ctx: Context<'a>>: Resolver<'a, Ctx> { /// Wrap the resolver into [`Rc`]. fn into_rc(self) -> Rc>; } impl<'a, Ctx: Context<'a>, R: Resolver<'a, Ctx>> ResolverExt<'a, Ctx> for R { fn into_rc(self) -> Rc> { Rc::new(self) } }