build method

List<String> build(
  1. Map<String, List<String>> parameters
)

Builds decoded path segments from typed encoded parameters.

Implementation

List<String> build(Map<String, List<String>> parameters) {
  final names = parameters.keys.toSet();
  if (names.length != parameterNames.length ||
      !names.containsAll(parameterNames)) {
    throw ParameterFormatException(
      'Encoded path parameters $names do not match $parameterNames.',
    );
  }

  final segments = <String>[];
  for (final part in _parts) {
    switch (part) {
      case _StaticPart(:final value):
        segments.add(value);
      case _ParameterPart(:final name):
        final values = parameters[name]!;
        if (values.length != 1) {
          throw ParameterFormatException(
            'Path parameter "$name" must encode one segment.',
          );
        }
        segments.add(values.single);
      case _RestPart(:final name):
        final values = parameters[name]!;
        if (values.isEmpty) {
          throw ParameterFormatException(
            'Rest parameter "$name" cannot be empty.',
          );
        }
        segments.addAll(values);
    }
  }
  return segments;
}