SwampConfig.withEnvironment constructor

SwampConfig.withEnvironment(
  1. Map<String, dynamic> data, {
  2. String? description,
  3. int? maxPlayers,
  4. bool? noDarkRooms,
})

Creates a SwampConfig merging default values, environment variables, and provided parameters.

Environment variables take precedence over defaults, and explicit parameters take precedence over environment variables.

Implementation

factory SwampConfig.withEnvironment(
  Map<String, dynamic> data, {
  String? description,
  int? maxPlayers,
  bool? noDarkRooms,
}) {
  final descriptionEnv =
      Platform.environment[descriptionEnvironment] ??
      String.fromEnvironment(descriptionEnvironment);
  final maxPlayersEnvString =
      Platform.environment[maxPlayersEnvironment] ??
      (int.fromEnvironment(maxPlayersEnvironment, defaultValue: -1) == -1
          ? null
          : int.fromEnvironment(maxPlayersEnvironment).toString());
  final maxPlayersEnv = maxPlayersEnvString != null
      ? int.tryParse(maxPlayersEnvString)
      : null;

  final noDarkRoomsEnvString =
      Platform.environment[noDarkRoomsEnvironment] ??
      (bool.fromEnvironment(noDarkRoomsEnvironment) ? 'true' : null);
  final noDarkRoomsEnv =
      noDarkRoomsEnvString?.toLowerCase() == 'true' ||
      noDarkRoomsEnvString == '1';

  return SwampConfigMapper.fromMap({
    ...data,
    if (descriptionEnv.isNotEmpty) 'description': descriptionEnv,
    if (maxPlayersEnv != null && maxPlayersEnv >= 0)
      'maxPlayers': maxPlayersEnv,
    if (noDarkRoomsEnv) 'noDarkRooms': true,
    'noDarkRooms': ?noDarkRooms,
    'maxPlayers': ?maxPlayers,
    'description': ?description,
  });
}