Skip to content

Commit

Permalink
external schema import (#470)
Browse files Browse the repository at this point in the history
* feat(gql_code_builder): allow external schema import
  • Loading branch information
knaeckeKami authored Aug 2, 2024
1 parent dcb03fa commit 954216d
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 30 deletions.
71 changes: 42 additions & 29 deletions codegen/gql_code_builder/lib/serializer.dart
Original file line number Diff line number Diff line change
@@ -1,42 +1,39 @@
import "package:analyzer/dart/element/element.dart";
import "package:code_builder/code_builder.dart";

Expression withCustomSerializers(
Expression serializersExpression,
Set<Expression> customSerializers,
) =>
customSerializers.fold(
serializersExpression,
(exp, serializer) => exp.cascade("add").call([serializer]),
);

Library buildSerializerLibrary(
Set<ClassElement> builtClasses,
String partDirectiveUrl,
Set<Expression> additionalSerializers,
) =>
Set<Expression> additionalSerializers, {
Expression? externalSerializers,
}) =>
Library(
(b) => b
..directives.add(Directive.part(partDirectiveUrl))
..body.addAll([
withCustomSerializers(
declareFinal(
"_serializersBuilder",
type: refer(
"SerializersBuilder", "package:built_value/serializer.dart"),
)
.assign(
refer(r"_$serializers"),
)
.property("toBuilder")
.call([]),
additionalSerializers,
).cascade("addPlugin").call([
refer(
"StandardJsonPlugin",
"package:built_value/standard_json_plugin.dart",
).call([])
]).statement,
declareFinal(
"_serializersBuilder",
type: refer(
"SerializersBuilder", "package:built_value/serializer.dart"),
)
.assign(
refer(r"_$serializers"),
)
.property("toBuilder")
.call([])
.withCustomSerializers(additionalSerializers)
.applyIf(
externalSerializers != null,
(expr) => expr.cascade("addAll").call([externalSerializers!]),
)
.cascade("addPlugin")
.call([
refer(
"StandardJsonPlugin",
"package:built_value/standard_json_plugin.dart",
).call([])
])
.statement,
refer("@SerializersFor", "package:built_value/serializer.dart").call([
literalList(
builtClasses
Expand All @@ -55,3 +52,19 @@ Library buildSerializerLibrary(
.call([]).statement,
]),
);

extension on Expression {
Expression applyIf(
bool condition,
Expression Function(Expression) wrap,
) =>
condition ? wrap(this) : this;

Expression withCustomSerializers(
Set<Expression> customSerializers,
) =>
customSerializers.fold(
this,
(exp, serializer) => exp.cascade("add").call([serializer]),
);
}
2 changes: 1 addition & 1 deletion codegen/gql_code_builder/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: gql_code_builder
version: 0.12.0
version: 0.13.0
description: Dart code builders taking *.graphql documents and SDL to build useful classes.
repository: https://github.com/gql-dart/gql
environment:
Expand Down

0 comments on commit 954216d

Please sign in to comment.