13
submitted 3 days ago by [email protected] to c/[email protected]

Which of these code styles do you find preferable?

First option using mut with constructor in the beginning:

  let mut post_form = PostInsertForm::new(
    data.name.trim().to_string(),
    local_user_view.person.id,
    data.community_id,
  );
  post_form.url = url.map(Into::into);
  post_form.body = body;
  post_form.alt_text = data.alt_text.clone();
  post_form.nsfw = data.nsfw;
  post_form.language_id = language_id;

Second option without mut and constructor at the end:

  let post_form = PostInsertForm {
    url: url.map(Into::into),
    body,
    alt_text: data.alt_text.clone(),
    nsfw: data.nsfw,
    language_id,
    ..PostInsertForm::new(
      data.name.trim().to_string(),
      local_user_view.person.id,
      data.community_id,
    )
  };

You can see the full PR here: https://github.com/LemmyNet/lemmy/pull/5037/files

you are viewing a single comment's thread
view the rest of the comments
[-] [email protected] 1 points 3 days ago

Thats even more verbose so the second option is better.

[-] [email protected] 6 points 3 days ago

Yeah if you have the second option, use it, but if the struct has private fields it won't work.

[-] [email protected] 2 points 3 days ago

The first one won't work either for private fields.

[-] [email protected] 2 points 3 days ago

You can have setters that set private fields, there are also sometimes structs with mixed private and public fields

[-] [email protected] 1 points 2 days ago

But why not use a proper builder pattern in that case?

[-] [email protected] 2 points 2 days ago

Because you don't control third party libraries

load more comments (1 replies)
load more comments (1 replies)
load more comments (1 replies)
this post was submitted on 23 Sep 2024
13 points (84.2% liked)

Rust Programming

8038 readers
38 users here now

founded 5 years ago
MODERATORS