Skip to content

Commit f2c6a17

Browse files
committed
refactor(dynamite): move defaults and validation methods to the interface
Signed-off-by: Nikolas Rimikis <leptopoda@users.noreply.github.com>
1 parent 11a50bf commit f2c6a17

File tree

79 files changed

+16663
-1042
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+16663
-1042
lines changed

packages/dynamite/dynamite/example/lib/petstore.openapi.dart

+42
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@ class $Client extends _i1.DynamiteClient {
318318
abstract interface class $NewPetInterface {
319319
String get name;
320320
String? get tag;
321+
@BuiltValueHook(initializeBuilder: true)
322+
static void _defaults($NewPetInterfaceBuilder b) {}
323+
@BuiltValueHook(finalizeBuilder: true)
324+
static void _validate($NewPetInterfaceBuilder b) {}
321325
}
322326

323327
abstract class NewPet implements $NewPetInterface, Built<NewPet, NewPetBuilder> {
@@ -340,11 +344,25 @@ abstract class NewPet implements $NewPetInterface, Built<NewPet, NewPetBuilder>
340344

341345
/// Serializer for NewPet.
342346
static Serializer<NewPet> get serializer => _$newPetSerializer;
347+
348+
@BuiltValueHook(initializeBuilder: true)
349+
static void _defaults(NewPetBuilder b) {
350+
$NewPetInterface._defaults(b);
351+
}
352+
353+
@BuiltValueHook(finalizeBuilder: true)
354+
static void _validate(NewPetBuilder b) {
355+
$NewPetInterface._validate(b);
356+
}
343357
}
344358

345359
@BuiltValue(instantiable: false)
346360
abstract interface class $PetInterface implements $NewPetInterface {
347361
int get id;
362+
@BuiltValueHook(initializeBuilder: true)
363+
static void _defaults($PetInterfaceBuilder b) {}
364+
@BuiltValueHook(finalizeBuilder: true)
365+
static void _validate($PetInterfaceBuilder b) {}
348366
}
349367

350368
abstract class Pet implements $PetInterface, Built<Pet, PetBuilder> {
@@ -367,12 +385,26 @@ abstract class Pet implements $PetInterface, Built<Pet, PetBuilder> {
367385

368386
/// Serializer for Pet.
369387
static Serializer<Pet> get serializer => _$petSerializer;
388+
389+
@BuiltValueHook(initializeBuilder: true)
390+
static void _defaults(PetBuilder b) {
391+
$PetInterface._defaults(b);
392+
}
393+
394+
@BuiltValueHook(finalizeBuilder: true)
395+
static void _validate(PetBuilder b) {
396+
$PetInterface._validate(b);
397+
}
370398
}
371399

372400
@BuiltValue(instantiable: false)
373401
abstract interface class $ErrorInterface {
374402
int get code;
375403
String get message;
404+
@BuiltValueHook(initializeBuilder: true)
405+
static void _defaults($ErrorInterfaceBuilder b) {}
406+
@BuiltValueHook(finalizeBuilder: true)
407+
static void _validate($ErrorInterfaceBuilder b) {}
376408
}
377409

378410
abstract class Error implements $ErrorInterface, Built<Error, ErrorBuilder> {
@@ -395,6 +427,16 @@ abstract class Error implements $ErrorInterface, Built<Error, ErrorBuilder> {
395427

396428
/// Serializer for Error.
397429
static Serializer<Error> get serializer => _$errorSerializer;
430+
431+
@BuiltValueHook(initializeBuilder: true)
432+
static void _defaults(ErrorBuilder b) {
433+
$ErrorInterface._defaults(b);
434+
}
435+
436+
@BuiltValueHook(finalizeBuilder: true)
437+
static void _validate(ErrorBuilder b) {
438+
$ErrorInterface._validate(b);
439+
}
398440
}
399441

400442
// coverage:ignore-start

packages/dynamite/dynamite/example/lib/petstore.openapi.g.dart

+12-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/dynamite/dynamite/lib/src/builder/resolve_interface.dart

+61
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ Spec buildInterface(
4242
BuiltList<Method>? methods,
4343
Iterable<TypeResultObject>? interfaces,
4444
String? documentation,
45+
Iterable<String>? defaults,
46+
Iterable<Expression>? validators,
4547
}) {
4648
assert((interfaces == null) != (methods == null), 'Either provide an interface or methods.');
4749
final className = '\$$identifier$interfaceSuffix';
@@ -66,5 +68,64 @@ Spec buildInterface(
6668
if (methods != null) {
6769
b.methods.addAll(methods);
6870
}
71+
72+
b.methods.add(
73+
Method((b) {
74+
b
75+
..name = '_defaults'
76+
..returns = refer('void')
77+
..static = true
78+
..annotations.add(
79+
refer('BuiltValueHook').call([], {
80+
'initializeBuilder': literalTrue,
81+
}),
82+
)
83+
..requiredParameters.add(
84+
Parameter(
85+
(b) => b
86+
..name = 'b'
87+
..type = refer('${className}Builder'),
88+
),
89+
);
90+
if (defaults != null && defaults.isNotEmpty) {
91+
b.body = Code(
92+
<String?>[
93+
'b',
94+
...defaults,
95+
].join(),
96+
);
97+
} else {
98+
b.body = const Code('');
99+
}
100+
}),
101+
);
102+
103+
b.methods.add(
104+
Method((b) {
105+
b
106+
..name = '_validate'
107+
..returns = refer('void')
108+
..annotations.add(
109+
refer('BuiltValueHook').call([], {
110+
'finalizeBuilder': literalTrue,
111+
}),
112+
)
113+
..static = true
114+
..requiredParameters.add(
115+
Parameter(
116+
(b) => b
117+
..name = 'b'
118+
..type = refer('${className}Builder'),
119+
),
120+
);
121+
if (validators != null && validators.isNotEmpty) {
122+
b.body = Block.of(
123+
validators.map((v) => v.statement),
124+
);
125+
} else {
126+
b.body = const Code('');
127+
}
128+
}),
129+
);
69130
});
70131
}

packages/dynamite/dynamite/lib/src/builder/resolve_object.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,13 @@ TypeResultObject resolveObject(
9393
identifier,
9494
methods: methods.build(),
9595
documentation: schema.formattedDescription,
96+
defaults: defaults.build(),
97+
validators: validators.build(),
9698
);
99+
97100
final $class = buildBuiltClass(
98101
identifier,
99102
documentation: schema.formattedDescription,
100-
defaults: defaults.build(),
101-
validators: validators.build(),
102103
);
103104

104105
state.output.addAll([

packages/dynamite/dynamite/lib/src/helpers/built_value.dart

+44-59
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,16 @@ const interfaceSuffix = 'Interface';
1010
Spec buildBuiltClass(
1111
String className, {
1212
String? documentation,
13-
Iterable<String>? defaults,
14-
Iterable<Expression>? validators,
15-
Iterable<Method>? methods,
1613
}) =>
1714
Class(
1815
(b) {
16+
final interfaceClass = '\$$className$interfaceSuffix';
17+
1918
b
2019
..name = className
2120
..abstract = true
2221
..implements.addAll([
23-
refer('\$$className$interfaceSuffix'),
22+
refer(interfaceClass),
2423
refer(
2524
'Built<$className, ${className}Builder>',
2625
),
@@ -35,67 +34,53 @@ Spec buildBuiltClass(
3534
buildSerializer(className),
3635
]);
3736

38-
if (methods != null) {
39-
b.methods.addAll(methods);
40-
}
41-
4237
if (documentation != null) {
4338
b.docs.addAll(escapeDescription(documentation));
4439
}
4540

46-
if (defaults != null && defaults.isNotEmpty) {
47-
b.methods.add(
48-
Method(
49-
(b) => b
50-
..name = '_defaults'
51-
..returns = refer('void')
52-
..static = true
53-
..lambda = true
54-
..annotations.add(
55-
refer('BuiltValueHook').call([], {
56-
'initializeBuilder': literalTrue,
57-
}),
58-
)
59-
..requiredParameters.add(
60-
Parameter(
61-
(b) => b
62-
..name = 'b'
63-
..type = refer('${className}Builder'),
64-
),
65-
)
66-
..body = Code(
67-
<String?>[
68-
'b',
69-
...defaults,
70-
].join(),
41+
b.methods.add(
42+
Method((b) {
43+
b
44+
..name = '_defaults'
45+
..returns = refer('void')
46+
..static = true
47+
..annotations.add(
48+
refer('BuiltValueHook').call([], {
49+
'initializeBuilder': literalTrue,
50+
}),
51+
)
52+
..requiredParameters.add(
53+
Parameter(
54+
(b) => b
55+
..name = 'b'
56+
..type = refer('${className}Builder'),
7157
),
72-
),
73-
);
74-
}
58+
)
59+
..body = Code('$interfaceClass._defaults(b);');
60+
}),
61+
);
7562

76-
if (validators != null && validators.isNotEmpty) {
77-
b.methods.add(
78-
Method((b) {
79-
b
80-
..name = '_validate'
81-
..returns = refer('void')
82-
..annotations.add(
83-
refer('BuiltValueHook').call([], {'finalizeBuilder': literalTrue}),
84-
)
85-
..static = true
86-
..requiredParameters.add(
87-
Parameter(
88-
(b) => b
89-
..name = 'b'
90-
..type = refer('${className}Builder'),
91-
),
92-
)
93-
..body = Block.of(
94-
validators.map((v) => v.statement),
95-
);
96-
}),
97-
);
98-
}
63+
b.methods.add(
64+
Method((b) {
65+
b
66+
..name = '_validate'
67+
..returns = refer('void')
68+
..annotations.add(
69+
refer('BuiltValueHook').call([], {
70+
'finalizeBuilder': literalTrue,
71+
}),
72+
)
73+
..static = true
74+
..requiredParameters.add(
75+
Parameter(
76+
(b) => b
77+
..name = 'b'
78+
..type = refer('${className}Builder'),
79+
),
80+
)
81+
..body = Code('$interfaceClass._validate(b);');
82+
}),
83+
);
9984
},
10085
);
10186

0 commit comments

Comments
 (0)