Make modules configurable via a build option

This commit is contained in:
Simon Binder 2019-11-28 20:46:42 +01:00
parent 9e7e6d0922
commit 8320ddc788
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
2 changed files with 71 additions and 7 deletions

View File

@ -2,6 +2,10 @@ import 'package:json_annotation/json_annotation.dart';
part 'options.g.dart';
// note when working on this file: If you can't run the builder because
// options.g.dart is missing, just re-create it from git. build_runner will
// complain about existing outputs, let it delete the part file.
/// Controllable options to define the behavior of the analyzer and the
/// generator.
@JsonSerializable(
@ -48,6 +52,9 @@ class MoorOptions {
@JsonKey(name: 'generate_connect_constructor')
final bool generateConnectConstructor;
@JsonKey(name: 'sqlite_modules', defaultValue: [])
final List<SqlModule> modules;
const MoorOptions(
{this.generateFromJsonStringConstructor = false,
this.overrideHashAndEqualsInResultSets = false,
@ -55,8 +62,20 @@ class MoorOptions {
this.skipVerificationCode = false,
this.useDataClassNameForCompanions = false,
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false,
this.generateConnectConstructor = false});
this.generateConnectConstructor = false,
this.modules = const []});
factory MoorOptions.fromJson(Map<String, dynamic> json) =>
_$MoorOptionsFromJson(json);
}
/// Set of sqlite modules that require special knowledge from the generator.
enum SqlModule {
/// Enables support for the json1 module and its functions when parsing sql
/// queries.
json1,
/// Enables support for the fts5 module and its functions when parsing sql
/// queries.
fts5,
}

View File

@ -9,17 +9,18 @@ part of 'options.dart';
MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
return $checkedNew('MoorOptions', json, () {
$checkKeys(json, allowedKeys: const [
'generate_from_json_string_constructor',
'write_from_json_string_constructor',
'override_hash_and_equals_in_result_sets',
'compact_query_methods',
'skip_verification_code',
'use_data_class_name_for_companions',
'use_column_name_as_json_key_when_defined_in_moor_file',
'generate_connect_constructor'
'generate_connect_constructor',
'sqlite_modules'
]);
final val = MoorOptions(
generateFromJsonStringConstructor: $checkedConvert(
json, 'generate_from_json_string_constructor', (v) => v as bool),
json, 'write_from_json_string_constructor', (v) => v as bool),
overrideHashAndEqualsInResultSets: $checkedConvert(
json, 'override_hash_and_equals_in_result_sets', (v) => v as bool),
compactQueryMethods:
@ -34,11 +35,17 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
(v) => v as bool),
generateConnectConstructor: $checkedConvert(
json, 'generate_connect_constructor', (v) => v as bool),
modules: $checkedConvert(
json,
'sqlite_modules',
(v) => (v as List)
?.map((e) => _$enumDecodeNullable(_$SqlModuleEnumMap, e))
?.toList()) ??
[],
);
return val;
}, fieldKeyMap: const {
'generateFromJsonStringConstructor':
'generate_from_json_string_constructor',
'generateFromJsonStringConstructor': 'write_from_json_string_constructor',
'overrideHashAndEqualsInResultSets':
'override_hash_and_equals_in_result_sets',
'compactQueryMethods': 'compact_query_methods',
@ -46,6 +53,44 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
'useDataClassNameForCompanions': 'use_data_class_name_for_companions',
'useColumnNameAsJsonKeyWhenDefinedInMoorFile':
'use_column_name_as_json_key_when_defined_in_moor_file',
'generateConnectConstructor': 'generate_connect_constructor'
'generateConnectConstructor': 'generate_connect_constructor',
'modules': 'sqlite_modules'
});
}
T _$enumDecode<T>(
Map<T, dynamic> enumValues,
dynamic source, {
T unknownValue,
}) {
if (source == null) {
throw ArgumentError('A value must be provided. Supported values: '
'${enumValues.values.join(', ')}');
}
final value = enumValues.entries
.singleWhere((e) => e.value == source, orElse: () => null)
?.key;
if (value == null && unknownValue == null) {
throw ArgumentError('`$source` is not one of the supported values: '
'${enumValues.values.join(', ')}');
}
return value ?? unknownValue;
}
T _$enumDecodeNullable<T>(
Map<T, dynamic> enumValues,
dynamic source, {
T unknownValue,
}) {
if (source == null) {
return null;
}
return _$enumDecode<T>(enumValues, source, unknownValue: unknownValue);
}
const _$SqlModuleEnumMap = {
SqlModule.json1: 'json1',
SqlModule.fts5: 'fts5',
};