Browse Source

Merge pull request #179 from provokateurin/feature/string-patterns

dynamite: Support strings with patterns
pull/180/head
Kate 2 years ago committed by GitHub
parent
commit
5e6e5a2232
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      packages/dynamite/lib/src/models/schema.dart
  2. 5
      packages/dynamite/lib/src/models/schema.g.dart
  3. 8
      packages/dynamite/lib/src/openapi_builder.dart

3
packages/dynamite/lib/src/models/schema.dart

@ -23,6 +23,7 @@ class Schema {
this.contentMediaType,
this.contentSchema,
this.discriminator,
this.pattern,
});
factory Schema.fromJson(final Map<String, dynamic> json) => _$SchemaFromJson(json);
@ -67,5 +68,7 @@ class Schema {
final Discriminator? discriminator;
final String? pattern;
bool get isContentString => type == 'string' && (contentMediaType?.isNotEmpty ?? false) && contentSchema != null;
}

5
packages/dynamite/lib/src/models/schema.g.dart

@ -26,7 +26,8 @@ Schema _$SchemaFromJson(Map<String, dynamic> json) {
'additionalProperties',
'contentMediaType',
'contentSchema',
'discriminator'
'discriminator',
'pattern'
],
);
return Schema(
@ -51,6 +52,7 @@ Schema _$SchemaFromJson(Map<String, dynamic> json) {
json['contentSchema'] == null ? null : Schema.fromJson(json['contentSchema'] as Map<String, dynamic>),
discriminator:
json['discriminator'] == null ? null : Discriminator.fromJson(json['discriminator'] as Map<String, dynamic>),
pattern: json['pattern'] as String?,
);
}
@ -80,5 +82,6 @@ Map<String, dynamic> _$SchemaToJson(Schema instance) {
writeNotNull('contentMediaType', instance.contentMediaType);
writeNotNull('contentSchema', instance.contentSchema?.toJson());
writeNotNull('discriminator', instance.discriminator?.toJson());
writeNotNull('pattern', instance.pattern);
return val;
}

8
packages/dynamite/lib/src/openapi_builder.dart

@ -574,6 +574,14 @@ class OpenAPIBuilder implements Builder {
parameter.schema!,
);
if (result.name == 'String' && parameter.schema?.pattern != null) {
code.write('''
if (!RegExp(r'${parameter.schema!.pattern!}').hasMatch(${_toDartName(parameter.name)})) {
throw Exception('Invalid value "\$${_toDartName(parameter.name)}" for parameter "${_toDartName(parameter.name)}" with pattern "' r'${parameter.schema!.pattern!}"'); // coverage:ignore-line
}
''');
}
final defaultValueCode = parameter.schema?.default_ != null
? _valueToEscapedValue(result.name, parameter.schema!.default_!.toString())
: null;

Loading…
Cancel
Save