pub trait SemanticRewriter<T, Error> {
// Required method
fn internal_rewrite(
&mut self,
value: &mut T,
) -> Result<RewriteResult, Error>;
// Provided method
fn rewrite(&mut self, value: T) -> Result<T, Error> { ... }
}