Skip to content

Commit

Permalink
Remove default value fallbacks from decoders per feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronsky committed Mar 16, 2024
1 parent cbd1e22 commit 8ecd1dd
Show file tree
Hide file tree
Showing 50 changed files with 66 additions and 77 deletions.
15 changes: 2 additions & 13 deletions Sources/CreateAPI/Generator/Templates.swift
Original file line number Diff line number Diff line change
Expand Up @@ -256,15 +256,8 @@ final class Templates {
func decode(property: Property, isUsingCodingKeys: Bool, includeDefaultValues: Bool) -> String {
let decode = property.isOptional ? "decodeIfPresent" : "decode"
let key = isUsingCodingKeys ? ".\(property.name)" : "\"\(property.key)\""
let statement = "self.\(property.name.accessor) = try values.\(decode)(\(property.type).self, forKey: \(key))"
guard includeDefaultValues else { return statement }

var defaultValue = ""
if property.isOptional, let value = property.defaultValue {
defaultValue = " ?? \(value)"
}

return "\(statement)\(defaultValue)"
return "self.\(property.name.accessor) = try values.\(decode)(\(property.type).self, forKey: \(key))"
}

/// Generated decoding of the directly inlined nested object.
Expand All @@ -290,11 +283,7 @@ final class Templates {

func initFromDecoderAnyOf(properties: [Property], includeDefaultValues: Bool) -> String {
let contents = properties.map {
let statement = "try? container.decode(\($0.type).self)"
guard includeDefaultValues && $0.isOptional, let defaultValue = $0.defaultValue else {
return "self.\($0.name.accessor) = \(statement)"
}
return "self.\($0.name.accessor) = (\(statement)) ?? \(defaultValue)"
return "self.\($0.name.accessor) = try? container.decode(\($0.type).self)"
}.joined(separator: "\n")
return """
\(access)init(from decoder: Decoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public struct DeploymentStatus: Codable {
self.state = try values.decode(State.self, forKey: "state")
self.creator = try values.decodeIfPresent(SimpleUser.self, forKey: "creator")
self.description = try values.decode(String.self, forKey: "description")
self.environment = try values.decodeIfPresent(String.self, forKey: "environment") ?? ""
self.environment = try values.decodeIfPresent(String.self, forKey: "environment")
self.targetURL = try values.decode(URL.self, forKey: "target_url")
self.createdAt = try values.decode(Date.self, forKey: "created_at")
self.updatedAt = try values.decode(Date.self, forKey: "updated_at")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ public struct FullRepository: Codable {
self.masterBranch = try values.decodeIfPresent(String.self, forKey: "master_branch")
self.openIssues = try values.decode(Int.self, forKey: "open_issues")
self.watchers = try values.decode(Int.self, forKey: "watchers")
self.isAnonymousAccessEnabled = try values.decodeIfPresent(Bool.self, forKey: "anonymous_access_enabled") ?? true
self.isAnonymousAccessEnabled = try values.decodeIfPresent(Bool.self, forKey: "anonymous_access_enabled")
self.codeOfConduct = try values.decodeIfPresent(CodeOfConductSimple.self, forKey: "code_of_conduct")
self.securityAndAnalysis = try values.decodeIfPresent(SecurityAndAnalysis.self, forKey: "security_and_analysis")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,10 +235,10 @@ public struct PullRequestReviewComment: Codable {
self.links = try values.decode(Links.self, forKey: "_links")
self.startLine = try values.decodeIfPresent(Int.self, forKey: "start_line")
self.originalStartLine = try values.decodeIfPresent(Int.self, forKey: "original_start_line")
self.startSide = try values.decodeIfPresent(StartSide.self, forKey: "start_side") ?? .right
self.startSide = try values.decodeIfPresent(StartSide.self, forKey: "start_side")
self.line = try values.decodeIfPresent(Int.self, forKey: "line")
self.originalLine = try values.decodeIfPresent(Int.self, forKey: "original_line")
self.side = try values.decodeIfPresent(Side.self, forKey: "side") ?? .right
self.side = try values.decodeIfPresent(Side.self, forKey: "side")
self.reactions = try values.decodeIfPresent(ReactionRollup.self, forKey: "reactions")
self.bodyHTML = try values.decodeIfPresent(String.self, forKey: "body_html")
self.bodyText = try values.decodeIfPresent(String.self, forKey: "body_text")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -852,7 +852,7 @@ public struct Repository: Codable {
self.size = try values.decode(Int.self, forKey: "size")
self.defaultBranch = try values.decode(String.self, forKey: "default_branch")
self.openIssuesCount = try values.decode(Int.self, forKey: "open_issues_count")
self.isTemplate = try values.decodeIfPresent(Bool.self, forKey: "is_template") ?? false
self.isTemplate = try values.decodeIfPresent(Bool.self, forKey: "is_template")
self.topics = try values.decodeIfPresent([String].self, forKey: "topics")
self.hasIssues = try values.decode(Bool.self, forKey: "has_issues")
self.hasProjects = try values.decode(Bool.self, forKey: "has_projects")
Expand All @@ -861,17 +861,17 @@ public struct Repository: Codable {
self.hasDownloads = try values.decode(Bool.self, forKey: "has_downloads")
self.isArchived = try values.decode(Bool.self, forKey: "archived")
self.isDisabled = try values.decode(Bool.self, forKey: "disabled")
self.visibility = try values.decodeIfPresent(String.self, forKey: "visibility") ?? "public"
self.visibility = try values.decodeIfPresent(String.self, forKey: "visibility")
self.pushedAt = try values.decodeIfPresent(Date.self, forKey: "pushed_at")
self.createdAt = try values.decodeIfPresent(Date.self, forKey: "created_at")
self.updatedAt = try values.decodeIfPresent(Date.self, forKey: "updated_at")
self.allowRebaseMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_rebase_merge") ?? true
self.allowRebaseMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_rebase_merge")
self.templateRepository = try values.decodeIfPresent(TemplateRepository.self, forKey: "template_repository")
self.tempCloneToken = try values.decodeIfPresent(String.self, forKey: "temp_clone_token")
self.allowSquashMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_squash_merge") ?? true
self.allowAutoMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_auto_merge") ?? false
self.deleteBranchOnMerge = try values.decodeIfPresent(Bool.self, forKey: "delete_branch_on_merge") ?? false
self.allowMergeCommit = try values.decodeIfPresent(Bool.self, forKey: "allow_merge_commit") ?? true
self.allowSquashMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_squash_merge")
self.allowAutoMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_auto_merge")
self.deleteBranchOnMerge = try values.decodeIfPresent(Bool.self, forKey: "delete_branch_on_merge")
self.allowMergeCommit = try values.decodeIfPresent(Bool.self, forKey: "allow_merge_commit")
self.allowForking = try values.decodeIfPresent(Bool.self, forKey: "allow_forking")
self.subscribersCount = try values.decodeIfPresent(Int.self, forKey: "subscribers_count")
self.networkCount = try values.decodeIfPresent(Int.self, forKey: "network_count")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,8 @@ public struct ReviewComment: Codable {
self.bodyText = try values.decodeIfPresent(String.self, forKey: "body_text")
self.bodyHTML = try values.decodeIfPresent(String.self, forKey: "body_html")
self.reactions = try values.decodeIfPresent(ReactionRollup.self, forKey: "reactions")
self.side = try values.decodeIfPresent(Side.self, forKey: "side") ?? .right
self.startSide = try values.decodeIfPresent(StartSide.self, forKey: "start_side") ?? .right
self.side = try values.decodeIfPresent(Side.self, forKey: "side")
self.startSide = try values.decodeIfPresent(StartSide.self, forKey: "start_side")
self.line = try values.decodeIfPresent(Int.self, forKey: "line")
self.originalLine = try values.decodeIfPresent(Int.self, forKey: "original_line")
self.startLine = try values.decodeIfPresent(Int.self, forKey: "start_line")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ public struct TeamRepository: Codable {
self.size = try values.decode(Int.self, forKey: "size")
self.defaultBranch = try values.decode(String.self, forKey: "default_branch")
self.openIssuesCount = try values.decode(Int.self, forKey: "open_issues_count")
self.isTemplate = try values.decodeIfPresent(Bool.self, forKey: "is_template") ?? false
self.isTemplate = try values.decodeIfPresent(Bool.self, forKey: "is_template")
self.topics = try values.decodeIfPresent([String].self, forKey: "topics")
self.hasIssues = try values.decode(Bool.self, forKey: "has_issues")
self.hasProjects = try values.decode(Bool.self, forKey: "has_projects")
Expand All @@ -401,18 +401,18 @@ public struct TeamRepository: Codable {
self.hasDownloads = try values.decode(Bool.self, forKey: "has_downloads")
self.isArchived = try values.decode(Bool.self, forKey: "archived")
self.isDisabled = try values.decode(Bool.self, forKey: "disabled")
self.visibility = try values.decodeIfPresent(String.self, forKey: "visibility") ?? "public"
self.visibility = try values.decodeIfPresent(String.self, forKey: "visibility")
self.pushedAt = try values.decodeIfPresent(Date.self, forKey: "pushed_at")
self.createdAt = try values.decodeIfPresent(Date.self, forKey: "created_at")
self.updatedAt = try values.decodeIfPresent(Date.self, forKey: "updated_at")
self.allowRebaseMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_rebase_merge") ?? true
self.allowRebaseMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_rebase_merge")
self.templateRepository = try values.decodeIfPresent(Repository.self, forKey: "template_repository")
self.tempCloneToken = try values.decodeIfPresent(String.self, forKey: "temp_clone_token")
self.allowSquashMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_squash_merge") ?? true
self.allowAutoMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_auto_merge") ?? false
self.deleteBranchOnMerge = try values.decodeIfPresent(Bool.self, forKey: "delete_branch_on_merge") ?? false
self.allowMergeCommit = try values.decodeIfPresent(Bool.self, forKey: "allow_merge_commit") ?? true
self.allowForking = try values.decodeIfPresent(Bool.self, forKey: "allow_forking") ?? false
self.allowSquashMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_squash_merge")
self.allowAutoMerge = try values.decodeIfPresent(Bool.self, forKey: "allow_auto_merge")
self.deleteBranchOnMerge = try values.decodeIfPresent(Bool.self, forKey: "delete_branch_on_merge")
self.allowMergeCommit = try values.decodeIfPresent(Bool.self, forKey: "allow_merge_commit")
self.allowForking = try values.decodeIfPresent(Bool.self, forKey: "allow_forking")
self.subscribersCount = try values.decodeIfPresent(Int.self, forKey: "subscribers_count")
self.networkCount = try values.decodeIfPresent(Int.self, forKey: "network_count")
self.openIssues = try values.decode(Int.self, forKey: "open_issues")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ struct Animal: Codable {
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
}

func encode(to encoder: Encoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ struct Cat: Codable {
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.isDeclawed = try values.decodeIfPresent(Bool.self, forKey: "declawed")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ struct Dog: Codable {
init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.breed = try values.decodeIfPresent(Breed.self, forKey: "breed")
self.image = try values.decodeIfPresent(Image.self, forKey: "image")
self.goodBoy = try values.decode(GoodBoy.self, forKey: "good_boy")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ struct Order: Codable {
self.quantity = try values.decodeIfPresent(Int32.self, forKey: "quantity")
self.shipDate = try values.decodeIfPresent(Date.self, forKey: "shipDate")
self.status = try values.decodeIfPresent(Status.self, forKey: "status")
self.isComplete = try values.decodeIfPresent(Bool.self, forKey: "complete") ?? false
self.isComplete = try values.decodeIfPresent(Bool.self, forKey: "complete")
}

func encode(to encoder: Encoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public struct Cat: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.isDeclawed = try values.decodeIfPresent(Bool.self, forKey: "declawed")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public struct Dog: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.breed = try values.decodeIfPresent(Breed.self, forKey: "breed")
self.image = try values.decodeIfPresent(Image.self, forKey: "image")
self.goodBoy = try values.decode(GoodBoy.self, forKey: "good_boy")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public struct Animal: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
}

public func encode(to encoder: Encoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public struct Cat: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.isDeclawed = try values.decodeIfPresent(Bool.self, forKey: "declawed")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public struct Dog: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.breed = try values.decodeIfPresent(Breed.self, forKey: "breed")
self.image = try values.decodeIfPresent(Image.self, forKey: "image")
self.goodBoy = try values.decode(GoodBoy.self, forKey: "good_boy")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public struct FormatTest: Codable {
self.binary = try values.decodeIfPresent(Data.self, forKey: "binary")
self.uri = try values.decodeIfPresent(String.self, forKey: "uri")
self.uriReference = try values.decodeIfPresent(String.self, forKey: "uri_reference")
self.uriDefault = try values.decodeIfPresent(String.self, forKey: "uri_default") ?? "https://www.swift.org/"
self.uriDefault = try values.decodeIfPresent(String.self, forKey: "uri_default")
self.uriRequired = try values.decode(String.self, forKey: "uri_required")
self.date = try values.decode(NaiveDate.self, forKey: "date")
self.dateTime = try values.decodeIfPresent(AnyJSON.self, forKey: "dateTime")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public struct Order: Codable {
self.quantity = try values.decodeIfPresent(Double.self, forKey: "quantity")
self.shipDate = try values.decodeIfPresent(AnyJSON.self, forKey: "shipDate")
self.status = try values.decodeIfPresent(Status.self, forKey: "status")
self.isComplete = try values.decodeIfPresent(Bool.self, forKey: "complete") ?? false
self.isComplete = try values.decodeIfPresent(Bool.self, forKey: "complete")
}

public func encode(to encoder: Encoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public struct Animal: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
}

public func encode(to encoder: Encoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public struct Cat: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.isDeclawed = try values.decodeIfPresent(Bool.self, forKey: "declawed")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public struct Dog: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
self.breed = try values.decodeIfPresent(Breed.self, forKey: "breed")
self.image = try values.decodeIfPresent(Image.self, forKey: "image")
self.goodBoy = try values.decode(GoodBoy.self, forKey: "good_boy")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public struct Order: Codable {
self.quantity = try values.decodeIfPresent(Int32.self, forKey: "quantity")
self.shipDate = try values.decodeIfPresent(Date.self, forKey: "shipDate")
self.status = try values.decodeIfPresent(Status.self, forKey: "status")
self.isComplete = try values.decodeIfPresent(Bool.self, forKey: "complete") ?? false
self.isComplete = try values.decodeIfPresent(Bool.self, forKey: "complete")
}

public func encode(to encoder: Encoder) throws {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public struct Animal: Codable {
public init(from decoder: Decoder) throws {
let values = try decoder.container(keyedBy: StringCodingKey.self)
self.className = try values.decode(String.self, forKey: "className")
self.color = try values.decodeIfPresent(String.self, forKey: "color") ?? "red"
self.color = try values.decodeIfPresent(String.self, forKey: "color")
}

public func encode(to encoder: Encoder) throws {
Expand Down
Loading

0 comments on commit 8ecd1dd

Please sign in to comment.