Skip to content

Commit 953a4a0

Browse files
feature: Applies didYouMean to enum values
1 parent 11d7284 commit 953a4a0

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

Sources/GraphQL/Type/Definition.swift

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,12 +1024,14 @@ public final class GraphQLEnumType {
10241024
public func parseValue(value: Map) throws -> Map {
10251025
guard let valueStr = value.string else {
10261026
throw GraphQLError(
1027-
message: "Enum '\(name)' cannot represent non-string value '\(value)'."
1027+
message: "Enum '\(name)' cannot represent non-string value '\(value)'." +
1028+
didYouMeanEnumValue(unknownValueStr: value.description)
10281029
)
10291030
}
10301031
guard let enumValue = nameLookup[valueStr] else {
10311032
throw GraphQLError(
1032-
message: "Value '\(valueStr)' does not exist in '\(name)' enum."
1033+
message: "Value '\(valueStr)' does not exist in '\(name)' enum." +
1034+
didYouMeanEnumValue(unknownValueStr: valueStr)
10331035
)
10341036
}
10351037
return enumValue.value
@@ -1038,18 +1040,26 @@ public final class GraphQLEnumType {
10381040
public func parseLiteral(valueAST: Value) throws -> Map {
10391041
guard let enumNode = valueAST as? EnumValue else {
10401042
throw GraphQLError(
1041-
message: "Enum '\(name)' cannot represent non-enum value '\(valueAST)'.",
1043+
message: "Enum '\(name)' cannot represent non-enum value '\(valueAST)'." +
1044+
didYouMeanEnumValue(unknownValueStr: "\(valueAST)"),
10421045
nodes: [valueAST]
10431046
)
10441047
}
10451048
guard let enumValue = nameLookup[enumNode.value] else {
10461049
throw GraphQLError(
1047-
message: "Value '\(enumNode)' does not exist in '\(name)' enum.",
1050+
message: "Value '\(enumNode)' does not exist in '\(name)' enum." +
1051+
didYouMeanEnumValue(unknownValueStr: enumNode.value),
10481052
nodes: [valueAST]
10491053
)
10501054
}
10511055
return enumValue.value
10521056
}
1057+
1058+
private func didYouMeanEnumValue(unknownValueStr: String) -> String {
1059+
let allNames = values.map { $0.name }
1060+
let suggestedValues = suggestionList(input: unknownValueStr, options: allNames)
1061+
return didYouMean("the enum value", suggestions: suggestedValues)
1062+
}
10531063
}
10541064

10551065
extension GraphQLEnumType: Encodable {

0 commit comments

Comments
 (0)