Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
added _defaults
  • Loading branch information
ahmednfwela committed Dec 20, 2022
commit db5c229409c5aa93d94129452d0d1682ea981e11
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ private void syncRootTypesWithInnerVars(Map<String, CodegenModel> objs, CodegenM
private final String kHasAncestorOnlyProps = "x-has-ancestor-only-props";
private final String kSelfAndAncestorOnlyProps = "x-self-and-ancestor-only-props";
private final String kHasSelfAndAncestorOnlyProps = "x-has-self-and-ancestor-only-props";
private final String kParentDiscriminator = "x-parent-discriminator";

// adapts codegen models and property to dart rules of inheritance
private void adaptToDartInheritance(Map<String, ModelsMap> objs) {
Expand Down Expand Up @@ -455,7 +456,11 @@ private void adaptToDartInheritance(Map<String, ModelsMap> objs) {
cm.vendorExtensions.put(kIsPure, isPure);
if (!isParent && (cm.oneOf == null || cm.oneOf.isEmpty()) && (cm.anyOf == null || cm.anyOf.isEmpty())) {
//discriminator has no meaning here
cm.discriminator=null;
if (cm.discriminator!=null) {
cm.vendorExtensions.put(kParentDiscriminator, cm.discriminator);
cm.discriminator=null;
}

}
// when pure:
// vars = allVars = selfOnlyProperties = kSelfAndAncestorOnlyProps
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,8 @@ part '{{classFilename}}.g.dart';
{{>serialization/built_value/class_members}}
}
{{#discriminator}}{{#hasDiscriminatorWithNonEmptyMapping}}
extension {{classname}}DiscriminatorExt on {{classname}} {
String? discriminatorValue() {
{{#mappedModels}}
if (this is {{modelName}}) {
return r'{{mappingName}}';
}
{{/mappedModels}}
return null;
}
}{{/hasDiscriminatorWithNonEmptyMapping}}{{/discriminator}}
{{>serialization/built_value/class_discriminator}}
{{/hasDiscriminatorWithNonEmptyMapping}}{{/discriminator}}
{{>serialization/built_value/class_serializer}}{{#vendorExtensions.x-is-parent}}

{{>serialization/built_value/class_concrete}}{{/vendorExtensions.x-is-parent}}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
extension {{classname}}DiscriminatorExt on {{classname}} {
String? discriminatorValue() {
{{#mappedModels}}
if (this is {{modelName}}) {
return r'{{mappingName}}';
}
{{/mappedModels}}
return null;
}
}
extension {{classname}}BuilderDiscriminatorExt on {{classname}}Builder {
String? discriminatorValue() {
{{#mappedModels}}
if (this is {{modelName}}Builder) {
return r'{{mappingName}}';
}
{{/mappedModels}}
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
factory {{classname}}([void updates({{classname}}Builder b)]) = _${{classname}};

@BuiltValueHook(initializeBuilder: true)
static void _defaults({{{classname}}}Builder b) => b{{#vendorExtensions.x-self-and-ancestor-only-props}}{{#defaultValue}}
static void _defaults({{{classname}}}Builder b) => b{{#vendorExtensions.x-parent-discriminator}}..{{propertyName}}=b.discriminatorValue(){{/vendorExtensions.x-parent-discriminator}}{{#vendorExtensions.x-self-and-ancestor-only-props}}{{#defaultValue}}
..{{{name}}} = {{#isEnum}}{{^isContainer}}const {{{enumName}}}._({{/isContainer}}{{/isEnum}}{{{defaultValue}}}{{#isEnum}}{{^isContainer}}){{/isContainer}}{{/isEnum}}{{/defaultValue}}{{/vendorExtensions.x-self-and-ancestor-only-props}};

{{/vendorExtensions.x-is-parent}} @BuiltValueSerializer(custom: true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,26 +10,17 @@ class _${{classname}}Serializer implements PrimitiveSerializer<{{classname}}> {
{{{classname}}} object, {
FullType specifiedType = FullType.unspecified,
}) sync* {
{{#vendorExtensions.x-self-and-ancestor-only-props}}
{{#required}}
{{!
A required property need to always be part of the serialized output.
When it is nullable, null is serialized, otherwise it is an error if it is null.
}}
yield r'{{baseName}}';
yield {{#isNullable}}object.{{{name}}} == null ? null : {{/isNullable}}serializers.serialize(
object.{{{name}}},
specifiedType: const {{>serialization/built_value/variable_serializer_type}},
);
{{/required}}
{{#vendorExtensions.x-self-and-ancestor-only-props}}
{{! Non-required properties are only serialized if not null. }}
{{^required}}
if (object.{{{name}}} != null) {
{{! Non-required properties are only serialized if not null. }}
{{/required}}
yield r'{{baseName}}';
yield serializers.serialize(
yield {{#required}}{{#isNullable}}object.{{{name}}} == null ? null : {{/isNullable}}{{/required}}serializers.serialize(
object.{{{name}}},
specifiedType: const {{>serialization/built_value/variable_serializer_type}},
);
{{^required}}
}
{{/required}}
{{/vendorExtensions.x-self-and-ancestor-only-props}}
Expand Down