SwampConfig.withEnvironment constructor

SwampConfig.withEnvironment(
  1. Map<String, dynamic> data, {
  2. String? description,
  3. int? maxPlayersPerRoom,
  4. int? maxConcurrentPlayers,
  5. int? maxRooms,
  6. 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? maxPlayersPerRoom,
  int? maxConcurrentPlayers,
  int? maxRooms,
  bool? noDarkRooms,
}) {
  final descriptionEnv =
      Platform.environment[descriptionEnvironment] ??
      String.fromEnvironment(descriptionEnvironment);
  final maxPlayersPerRoomEnvString =
      Platform.environment[maxPlayersPerRoomEnvironment] ??
      (int.fromEnvironment(maxPlayersPerRoomEnvironment, defaultValue: -1) ==
              -1
          ? null
          : int.fromEnvironment(maxPlayersPerRoomEnvironment).toString());
  final maxPlayersPerRoomEnv = maxPlayersPerRoomEnvString != null
      ? int.tryParse(maxPlayersPerRoomEnvString)
      : null;
  final maxConcurrentPlayersEnvString =
      Platform.environment[maxConcurrentPlayersEnvironment] ??
      (int.fromEnvironment(
                maxConcurrentPlayersEnvironment,
                defaultValue: -1,
              ) ==
              -1
          ? null
          : int.fromEnvironment(maxConcurrentPlayersEnvironment).toString());
  final maxConcurrentPlayersEnv = maxConcurrentPlayersEnvString != null
      ? int.tryParse(maxConcurrentPlayersEnvString)
      : null;
  final maxRoomsEnvString =
      Platform.environment[maxRoomsEnvironment] ??
      (int.fromEnvironment(maxRoomsEnvironment, defaultValue: -1) == -1
          ? null
          : int.fromEnvironment(maxRoomsEnvironment).toString());
  final maxRoomsEnv = maxRoomsEnvString != null
      ? int.tryParse(maxRoomsEnvString)
      : 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 (maxPlayersPerRoomEnv != null && maxPlayersPerRoomEnv >= 0)
      'maxPlayersPerRoom': maxPlayersPerRoomEnv,
    if (maxConcurrentPlayersEnv != null && maxConcurrentPlayersEnv >= 0)
      'maxConcurrentPlayers': maxConcurrentPlayersEnv,
    if (maxRoomsEnv != null && maxRoomsEnv >= 0) 'maxRooms': maxRoomsEnv,
    if (noDarkRoomsEnv) 'noDarkRooms': true,
    'noDarkRooms': ?noDarkRooms,
    'maxPlayersPerRoom': ?maxPlayersPerRoom,
    'maxConcurrentPlayers': ?maxConcurrentPlayers,
    'maxRooms': ?maxRooms,
    'description': ?description,
  });
}