Skip to content

Instantly share code, notes, and snippets.

@nkmrh
Created December 7, 2022 00:59
Show Gist options
  • Save nkmrh/972019b82eac162c844210fe2dba038d to your computer and use it in GitHub Desktop.
Save nkmrh/972019b82eac162c844210fe2dba038d to your computer and use it in GitHub Desktop.
ApolloCodegen の仕組み
// https://github.com/apollographql/apollo-ios/blob/main/Sources/ApolloCodegenLib/ApolloCodegen.swift#L313-L318
// ApolloCodegen Codegen の仕組み
// FileGenerator
protocol FileGenerator {
var template: TemplateRenderer { get }
}
extension FileGenerator {
func generate() {
// writeToFile(template.render())
}
}
// TemplateRenderer
protocol TemplateRenderer {
var template: TemplateString { get }
}
extension TemplateRenderer {
func render() -> String {
template.description
//TemplateString("\(template)")
}
}
// TemplateString
struct TemplateString: CustomStringConvertible {
var description: String { "" }
}
// Enum
struct EnumFileGenerator: FileGenerator {
var template: TemplateRenderer {
EnumTemplate()
}
}
struct EnumTemplate: TemplateRenderer {
var template: TemplateString {
TemplateString()
// TemplateString("""
// // Comment
// enum ABC: String EnumType {
// case a
// case b
// case c
// }
//
// """)
}
}
// ApolloCodegen.build()
// func compileGraphQLResult -> call graphql-js method
// create IR
// generateFiles(IR)
// ex) graphQLEnum
// EnumFileGenerator().generate()
// EnumTemplate.template
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment