@@ -426,7 +426,6 @@ FieldsInSetCanMerge(set):
426426
427427SameResponseShape(fieldA, fieldB):
428428
429- <<<<<<< HEAD
430429- Let {typeA} be the return type of {fieldA}.
431430- Let {typeB} be the return type of {fieldB}.
432431- If {typeA} or {typeB} is Non-Null.
@@ -449,34 +448,6 @@ SameResponseShape(fieldA, fieldB):
449448- Given each pair of members {subfieldA} and {subfieldB} in {fieldsForName}:
450449 - If {SameResponseShape(subfieldA, subfieldB)} is false, return false.
451450- Return true.
452- =======
453- * Let {typeA} be the return type of {fieldA}.
454- * Let {typeB} be the return type of {fieldB}.
455- * Let {fieldARequiredStatus} be the required status of {fieldA}
456- * Let {fieldBRequiredStatus} be the required status of {fieldB}
457- * Let {typeA} be the result of {ModifiedOutputType(typeA, fieldARequiredStatus)}
458- * Let {typeB} be the result of {ModifiedOutputType(typeB, fieldBRequiredStatus)}
459- * If {typeA} or {typeB} is Non-Null.
460- * If {typeA} or {typeB} is nullable, return false.
461- * Let {typeA} be the nullable type of {typeA}
462- * Let {typeB} be the nullable type of {typeB}
463- * If {typeA} or {typeB} is List.
464- * If {typeA} or {typeB} is not List, return false.
465- * Let {typeA} be the item type of {typeA}
466- * Let {typeB} be the item type of {typeB}
467- * Repeat from step 3.
468- * If {typeA} or {typeB} is Scalar or Enum.
469- * If {typeA} and {typeB} are the same type return true, otherwise return
470- false.
471- * Assert: {typeA} and {typeB} are both composite types.
472- * Let {mergedSet} be the result of adding the selection set of {fieldA} and
473- the selection set of {fieldB}.
474- * Let {fieldsForName} be the set of selections with a given response name in
475- {mergedSet} including visiting fragments and inline fragments.
476- * Given each pair of members {subfieldA} and {subfieldB} in {fieldsForName}:
477- * If {SameResponseShape(subfieldA, subfieldB)} is false, return false.
478- * Return true.
479- >>>>>>> 9906241 (errors and validation formal definitions)
480451
481452** Explanatory Text**
482453
@@ -608,6 +579,27 @@ fragment conflictingDifferingResponses on Pet {
608579}
609580```
610581
582+ ### Client Controlled Nullability Designator List Dimensions
583+
584+ ** Formal Specification**
585+
586+ * For each {field} in the document
587+ * Let {fieldDef} be the definition of {field}
588+ * Let {fieldType} be the type of {fieldDef}
589+ * Let {requiredStatus} be the required status of {field}
590+ * Let {designatorDepth} be the number of square bracket pairs in {requiredStatus}
591+ * Let {typeDepth} be the number of list dimensions in {fieldType}
592+ * If {typeDepth} equals {designatorDepth} return true
593+ * Otherwise return false
594+
595+ ** Explanatory Text**
596+
597+ List fields can be marked with nullability designators that look like ` [?]! ` to indicate the
598+ nullability of the list's elements and the nullability of the list itself. For multi-dimensional
599+ lists, the designator would look something like ` [[[!]?]]! ` . The number of dimensions of the
600+ designator are required to match the number of dimensions of the field's type. If the two do not
601+ match then a validation error is thrown.
602+
611603### Leaf Field Selections
612604
613605** Formal Specification**
0 commit comments