nrc / derive-new

derive simple constructor functions for Rust structs
MIT License
525 stars 35 forks source link

Feature Request: ::new(_) should support .into() #43

Open zutils opened 5 years ago

zutils commented 5 years ago

Many times I have MyStruct::new("something".into()). I would rather not keep typing into(). Perhaps there is a way that new can take an Into.

nathan-at-least commented 2 years ago

I came to make the same suggestion.

However, I also prefer precision and explicitness, so I wouldn't recommend always supporting Into on every new param. Here are some brainstorms about design:

A per-struct style configuration

The default style equivalent to the current direct/concrete argument types, then a style called "Into" is introduced:

#[derive(new)]
#[new(style="Into")]
struct Account {
  name: String,
  info: Box<Address>,
}

let acct = Account::new("alice", Address::new(…));

Per-field configuration

#[derive(new)]
struct Account {
  #[new(style="Into")]
  name: String,
  info: Box<Address>,
}

let acct = Account::new("alice", Address::new(…)); // Error: expected `Box<Address>` found `Address`

My preference is to support both struct-scoped and per-field configurations. Struct-scoped reduces boilerplate, whereas per-field allows fined-grained precision.

OmarTawfik commented 10 months ago

I implemented the feature in #65 (first time contributor to this crate). Please let me know what you think.