Heh, I didn't consciously realize that the way Rust determines whether an associated function is a method or not is based on whether the identifier is called `self`. That means that this is a method:
fn meow(&mut self) { .. }
And so is this:
fn meow(self: &mut Self) { .. }
But this is not:
fn meow(Self { a, b }: &mut Self) { .. }
Instead the latter is parsed as a static method that takes an instance of `Self`. Despite it operating on the same type as the other variants.