Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
}
}
-pub trait PieceXDataExt {
- fn get<T:PieceXData+Default>(&self) -> Result<Option<&T>, IE>;
- fn get_mut<T:PieceXData+Default>(&mut self) -> Result<&mut T, IE>;
-}
-
fn xdata_unexpected<T:PieceXData+Default>(got: &dyn PieceXData)
-> InternalError {
internal_logic_error(format!(
))
}
-impl PieceXDataExt for PieceXDataState {
+#[ext(pub)]
+impl PieceXDataState {
#[throws(IE)]
fn get<T:PieceXData>(&self) -> Option<&T> where T: Default {
let xdata = if let Some(xdata) = &self { xdata } else { return None };
}
}
-pub trait OrdExt: Ord + Sized + Clone {
+#[ext(pub, name=OrdExt)]
+impl<T: Ord + Sized + Clone> T {
fn update_max(&mut self, new: &Self) {
if *new > *self { *self = new.clone() }
}
}
-impl<T> OrdExt for T where T: Ord + Sized + Clone { }
pub trait SplitAtDelim<Delim> {
fn split_at_delim(&self, delim: Delim) -> (&Self, &Self);