FRU syntax does not work across crate boundaries on non_exhaustive structs. This hampers ergonomics, especially when it comes to things like the Default trait.
For example:
// Crate 1
#[non_exhaustive]
pub struct Options {
pub foo: String,
pub bar: String,
}
impl Default for Options {
fn default() -> Self {
Options { foo: "foo".to_string(), bar: "bar".to_string() }
}
}
// Crate 2 (does not compile!)
fn main() {
let _options = Options { bar: "baz".to_string(), ..Default::default() };
}
There's plenty of historical discussions around how FRU doesn't work like people expect, which are the root of why it can't work today with structs with private fields.
It's a breaking change to change it, but personally I'd be interested in seeing someone take it up as an edition change...