this post was submitted on 23 Sep 2024
16 points (86.4% liked)

Rust Programming

8144 readers
2 users here now

founded 6 years ago
MODERATORS
 

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
[–] nutomic@lemmy.ml 5 points 10 months ago (11 children)

@DemocratPostingSucks@lemm.ee @Deebster@programming.dev @al4s@feddit.org Thanks for the feedback! Personally I prefer the first option, but based on your comments I will merge the PR with the second option.

[–] al4s@feddit.org 12 points 10 months ago (10 children)

If you're ever forced to do something the second way, you can also wrap it in braces, that way you end up with an immutable value again:

let app = {
  let mut app = ...
  ...
  app
};
[–] nutomic@lemmy.ml 1 points 10 months ago (1 children)

Thats even more verbose so the second option is better.

[–] al4s@feddit.org 6 points 10 months ago (1 children)

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

[–] taladar@sh.itjust.works 2 points 10 months ago (1 children)

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

[–] al4s@feddit.org 2 points 10 months ago (1 children)

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

[–] taladar@sh.itjust.works 1 points 10 months ago (1 children)

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

[–] al4s@feddit.org 2 points 10 months ago

Because you don't control third party libraries

load more comments (8 replies)
load more comments (8 replies)