Check if a type’s fields can all be safely defaulted.
Primitives, strings, collections, Options, and Duration all have Default impls.
Named types (custom structs) only have Default if explicitly marked with has_default=true.
If any field is a Named type without has_default, returning true would generate
code that calls Default::default() on a type that doesn’t implement it.
Check if a TypeRef references an opaque type, including through Optional and Vec wrappers.
Opaque types use Arc which doesn’t implement Serialize/Deserialize, so any struct with
such a field cannot derive those traits.
Generate an opaque wrapper struct with inner: Arc<core::Type>.
For trait types, uses Arc<dyn Type + Send + Sync>.
For types with &mut self methods, uses Arc<Mutex<core::Type>>.
Generate a Default impl for a non-opaque binding struct with has_default.
All fields use their type’s Default::default().
Optional fields use None instead of Default::default().
This enables the struct to be used with unwrap_or_default() in config constructors.