pub trait ValidateAndFixup {
// Required method
fn validate_and_fixup(&self, fixup: bool) -> Result<Option<Self>>
where Self: Sized;
// Provided methods
fn check_valid(&self) -> Result<()>
where Self: Sized { ... }
fn fixup(self) -> Result<Self>
where Self: Sized { ... }
fn maybe_fixup(&self) -> Result<Option<Self>>
where Self: Sized { ... }
}