createPromotedArgValue function

Expression createPromotedArgValue({
  1. required ServerType paramType,
  2. required Expression? fromJson,
})

Implementation

Expression createPromotedArgValue({
  required ServerType paramType,
  required Expression? fromJson,
}) {
  final sourceType = bindingSourceType(paramType);

  return fromJson ??
      switch (sourceType) {
        ServerType(:final iterableType?) => switch (iterableType) {
          IterableType.list => _typedCast(
            refer('data'),
            sourceType.typeArguments.firstOrNull,
          ),
          IterableType.set => _typedCast(
            refer('data').property('toSet').call([]),
            sourceType.typeArguments.firstOrNull,
          ),
          IterableType.iterable => refer('data'),
        },
        _ => refer('data'),
      };
}