-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconfig.dart
66 lines (55 loc) · 1.77 KB
/
config.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import 'dart:convert';
import 'dart:io';
import 'package:json_annotation/json_annotation.dart';
part 'config.g.dart';
@JsonSerializable(anyMap: true, checked: true)
class DatabaseConfig {
DatabaseConfig({
required this.host,
required this.port,
required this.databaseName,
required this.username,
this.password,
});
factory DatabaseConfig.fromJson(Map<String, dynamic> json) =>
_$DatabaseConfigFromJson(json);
/// load database configuration from the `DBCONFIG` environment variables.
/// this environment variable must be a json.
factory DatabaseConfig.fromEnvironment({DatabaseConfig? defaults}) =>
DatabaseConfig.fromJson(_jsonFromEnvironment(defaults));
static final defaults = DatabaseConfig.fromJson(<String, dynamic>{});
Map<String, dynamic> toJson() => _$DatabaseConfigToJson(this);
@JsonKey(defaultValue: 'localhost')
final String host;
@JsonKey(defaultValue: 5432)
final int port;
@JsonKey(defaultValue: 'authpass')
final String databaseName;
@JsonKey(defaultValue: 'authpass')
final String username;
@JsonKey(defaultValue: 'blubb')
final String? password;
DatabaseConfig copyWith({
String? host,
int? port,
String? databaseName,
}) =>
DatabaseConfig(
host: host ?? this.host,
port: port ?? this.port,
databaseName: databaseName ?? this.databaseName,
username: username,
password: password,
);
}
Map<String, dynamic> _jsonFromEnvironment(DatabaseConfig? defaults) {
final defaultJson = defaults?.toJson() ?? <String, dynamic>{};
final dbConfig = Platform.environment['DBCONFIG'];
if (dbConfig != null) {
return <String, dynamic>{
...defaultJson,
...(json.decode(dbConfig) as Map<String, dynamic>),
};
}
return defaultJson;
}