Currently cargo.bbclass does out-of-tree builds but supports in-tree builds. But cargo has out-of-tree as a first class citizen and three independent people said that if it doesn't work you've found a bug in a package. So we should mandate S!=B and just always cleandirs B. This will remove some logic from the cargo class. Complication: as rust is often conjoined with other projects, we should set B=WORKDIR/build but then tell cargo to use B/target and cleandirs B/target.
The catch here is that cargo-common can't do this as it gets reused in recipes that do rust-and-something-else, like librsvg/maturin.