Skip to content

Generate dynamic decoder could pick suitable zero value when possible #5299

@giacomocavalieri

Description

@giacomocavalieri

It would be nice if the "generate dynamic decoder" code action could pick a suitable zero value when generating the decoder if the selected type has a constructor with no arguments:

pub type ReviewOutcome {
  Approved
  Rejected
  Commented
}

fn review_outcome_decoder() -> decode.Decoder(ReviewOutcome) {
  use variant <- decode.then(decode.string)
  case variant {
    "approved" -> decode.success(Approved)
    "rejected" -> decode.success(Rejected)
    "commented" -> decode.success(Commented)
    _ -> decode.failure(todo as "zero value for ReviewOutcome", "ReviewOutcome")
  }
}

What if, seeing a constructor with no values it could use that directly?

fn review_outcome_decoder() -> decode.Decoder(ReviewOutcome) {
  use variant <- decode.then(decode.string)
  case variant {
    "approved" -> decode.success(Approved)
    "rejected" -> decode.success(Rejected)
    "commented" -> decode.success(Commented)
-    _ -> decode.failure(todo as "zero value for ReviewOutcome", "ReviewOutcome")
+    _ -> decode.failure(Approved, "ReviewOutcome")
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions