I hadn’t considered that, but that’s because my initial suggestion was something that the current api can’t do, for example:
fn hash<S: Hasher>(&self, state: &mut S) {
let (ref a, ref b) = *self;
let a_s = S::new(); // This doesn't exist currently.
a.hash(a_s);
state.write_u64(a_s.finish());
let b_s = S::new(); // This doesn't exist currently.
b.hash(b_s);
state.write_u64(b_s.finish());
}
There are probably other implications to this that I’m not aware of, but does solve the problem.