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'; 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 /// Controllable options to define the behavior of the analyzer and the
/// generator. /// generator.
@JsonSerializable( @JsonSerializable(
@ -48,6 +52,9 @@ class MoorOptions {
@JsonKey(name: 'generate_connect_constructor') @JsonKey(name: 'generate_connect_constructor')
final bool generateConnectConstructor; final bool generateConnectConstructor;
@JsonKey(name: 'sqlite_modules', defaultValue: [])
final List<SqlModule> modules;
const MoorOptions( const MoorOptions(
{this.generateFromJsonStringConstructor = false, {this.generateFromJsonStringConstructor = false,
this.overrideHashAndEqualsInResultSets = false, this.overrideHashAndEqualsInResultSets = false,
@ -55,8 +62,20 @@ class MoorOptions {
this.skipVerificationCode = false, this.skipVerificationCode = false,
this.useDataClassNameForCompanions = false, this.useDataClassNameForCompanions = false,
this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false, this.useColumnNameAsJsonKeyWhenDefinedInMoorFile = false,
this.generateConnectConstructor = false}); this.generateConnectConstructor = false,
this.modules = const []});
factory MoorOptions.fromJson(Map<String, dynamic> json) => factory MoorOptions.fromJson(Map<String, dynamic> json) =>
_$MoorOptionsFromJson(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) { MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
return $checkedNew('MoorOptions', json, () { return $checkedNew('MoorOptions', json, () {
$checkKeys(json, allowedKeys: const [ $checkKeys(json, allowedKeys: const [
'generate_from_json_string_constructor', 'write_from_json_string_constructor',
'override_hash_and_equals_in_result_sets', 'override_hash_and_equals_in_result_sets',
'compact_query_methods', 'compact_query_methods',
'skip_verification_code', 'skip_verification_code',
'use_data_class_name_for_companions', 'use_data_class_name_for_companions',
'use_column_name_as_json_key_when_defined_in_moor_file', 'use_column_name_as_json_key_when_defined_in_moor_file',
'generate_connect_constructor' 'generate_connect_constructor',
'sqlite_modules'
]); ]);
final val = MoorOptions( final val = MoorOptions(
generateFromJsonStringConstructor: $checkedConvert( generateFromJsonStringConstructor: $checkedConvert(
json, 'generate_from_json_string_constructor', (v) => v as bool), json, 'write_from_json_string_constructor', (v) => v as bool),
overrideHashAndEqualsInResultSets: $checkedConvert( overrideHashAndEqualsInResultSets: $checkedConvert(
json, 'override_hash_and_equals_in_result_sets', (v) => v as bool), json, 'override_hash_and_equals_in_result_sets', (v) => v as bool),
compactQueryMethods: compactQueryMethods:
@ -34,11 +35,17 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
(v) => v as bool), (v) => v as bool),
generateConnectConstructor: $checkedConvert( generateConnectConstructor: $checkedConvert(
json, 'generate_connect_constructor', (v) => v as bool), 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; return val;
}, fieldKeyMap: const { }, fieldKeyMap: const {
'generateFromJsonStringConstructor': 'generateFromJsonStringConstructor': 'write_from_json_string_constructor',
'generate_from_json_string_constructor',
'overrideHashAndEqualsInResultSets': 'overrideHashAndEqualsInResultSets':
'override_hash_and_equals_in_result_sets', 'override_hash_and_equals_in_result_sets',
'compactQueryMethods': 'compact_query_methods', 'compactQueryMethods': 'compact_query_methods',
@ -46,6 +53,44 @@ MoorOptions _$MoorOptionsFromJson(Map<String, dynamic> json) {
'useDataClassNameForCompanions': 'use_data_class_name_for_companions', 'useDataClassNameForCompanions': 'use_data_class_name_for_companions',
'useColumnNameAsJsonKeyWhenDefinedInMoorFile': 'useColumnNameAsJsonKeyWhenDefinedInMoorFile':
'use_column_name_as_json_key_when_defined_in_moor_file', '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',
};