{{#each innerTypes}} public struct {{#if isRoot}}Data{{else}}{{#if isInlineFragment}}As{{schemaTypeName}}{{else}}{{#if isFragment}}{{schemaTypeName}}{{else}}{{name}}{{/if}}{{/if}}{{/if}}: {{#if isInlineFragment}}GraphQLConditionalFragment{{else}}{{#if isFragment}}GraphQLNamedFragment{{else}}GraphQLMappable{{/if}}{{/if}} { {{#if isFragment }}public static let fragmentDefinition = {{#multiline-string ../document }}{{/multiline-string}}{{/if}} {{#if isInlineFragment}} public static let possibleTypes = ["{{schemaTypeName}}"] {{/if}} {{#if hasInlineFragments}} public static let possibleTypes = [{{#each inlineFragments}}"{{ typeName }}"{{#unless @last}}, {{/unless}}{{/each}}] {{/if}} {{#unless isRoot}} public let __typename{{#if isInlineFragment}} = "{{schemaTypeName}}"{{else}}: String{{/if}} {{/unless}} {{#if usingFragments}} public let fragments: Fragments {{/if}} {{#if isInlineFragment}} {{#each ../parentFields}} public let {{ name }}: {{#if isArray}}[{{/if}}{{ type }}{{#if isArray}}?]{{/if}}{{#unless isRequired}}?{{/unless}} {{/each}} {{/if}} {{#each fields}} public let {{ name }}: {{#if isArray}}[{{/if}}{{ type }}{{#if isArray}}?]{{/if}}{{#unless isRequired}}?{{/unless}} {{/each}} {{#each inlineFragments}} public let as{{ typeName }}: As{{ typeName }}? {{/each}} public init(reader: GraphQLResultReader) throws { {{#unless isRoot}} {{#unless isInlineFragment}} __typename = try reader.value(for: Field(responseName: "__typename")) {{/unless}} {{/unless}} {{#each fields}} {{ name }} = try reader.{{#if isRequired }}{{#if isArray}}list{{else}}value{{/if}}{{ else }}{{#if isArray}}optionalList{{else}}optionalValue{{/if}}{{/if}}(for: Field(responseName: "{{ name }}"{{#if isAliased}}, fieldName: "{{ schemaFieldName }}"{{/if}})) {{/each}} {{#if isInlineFragment}} {{#each ../parentFields}} {{ name }} = try reader.{{#if isRequired }}{{#if isArray}}list{{else}}value{{/if}}{{ else }}{{#if isArray}}optionalList{{else}}optionalValue{{/if}}{{/if}}(for: Field(responseName: "{{ name }}"{{#if isAliased}}, fieldName: "{{ schemaFieldName }}"{{/if}})) {{/each}} {{/if}} {{#each inlineFragments}} as{{ typeName }} = try As{{ typeName }}(reader: reader, ifTypeMatches: __typename) {{/each}} {{#if usingFragments}} {{#each fragmentsUsed}} let {{fieldName}} = try {{typeName}}(reader: reader) {{/each}} fragments = Fragments({{#each fragmentsUsed}}{{fieldName}}: {{fieldName}}{{/each}}) {{/if}} } {{#if usingFragments}} public struct Fragments { {{#each fragmentsUsed}} public let {{fieldName}}: {{typeName}} {{/each}} } {{/if}} {{> inner-type innerTypes=innerTypes parentFields=fields}} } {{/each}}