getParameters function

Iterable<Parameter> getParameters(
  1. Iterable<ClientParam> params,
  2. ClientMethod method
)

Implementation

Iterable<Parameter> getParameters(
  Iterable<ClientParam> params,
  ClientMethod method,
) sync* {
  final (cookies: _, :body, :query, :headers) = params.separate;

  if (!method.isWebsocket || method.websocketType.canSendAny) {
    final roots = body.roots();

    if (method.websocketBody case final ClientParam param) {
      yield Parameter(
        (b) => b
          ..type = refer(param.type.name)
          ..name = param.name
          ..named = true
          ..required = !(param.type.isNullable || param.hasDefaultValue),
      );
    } else {
      for (final param in body) {
        if (!body.needsAssignment(param, roots)) {
          continue;
        }

        yield _create(param, isStream: method.websocketType.canSendMany);
      }
    }
  }

  for (final param in query) {
    yield _create(param);
  }

  if (method.isWebsocket) {
    return;
  }

  for (final param in headers) {
    yield _create(param);
  }
}