which is more compact. I don't want to discuss of Stuff over Self. I think both are perfectly valid in this case (you can even do Self { foo: 0, bar: "".into() }
Ah, that's also cool. I don't like the fact that I have to construct the value with ::default() now because I am used to constructing things with ::new() but it's probably the right thing to do in this case.
I would write a new function even if you're also using default. That might seem redundant at first, but the big difference between them is that default comes from the Default trait, and implementing it means your type is default-constructable in generic contexts. Meanwhile users who are directly creating an instance can reach for the shorter and more familiar new function.
Both is correct and possible. I like Default::default() more, because it is not ambiguous, e.g. if you define a method default on your struct, you would call that instead (Playground).