functionGemmaArgument function

String functionGemmaArgument(
  1. dynamic value, {
  2. bool escapeKeys = true,
})

The template's format_argument macro: strings are escape-wrapped, booleans and numbers stay bare, lists and maps recurse.

Implementation

String functionGemmaArgument(dynamic value, {bool escapeKeys = true}) {
  if (value is String) {
    return '$functionGemmaEscape$value$functionGemmaEscape';
  }
  if (value is bool) return value ? 'true' : 'false';
  if (value is List) {
    final items = value.map(
      (v) => functionGemmaArgument(v, escapeKeys: escapeKeys),
    );
    return '[${items.join(',')}]';
  }
  if (value is Map) {
    final entries = functionGemmaDictsort(value.keys.map((k) => '$k')).map((
      key,
    ) {
      final renderedKey = escapeKeys
          ? '$functionGemmaEscape$key$functionGemmaEscape'
          : key;
      final rendered = functionGemmaArgument(
        value[key],
        escapeKeys: escapeKeys,
      );
      return '$renderedKey:$rendered';
    });
    return '{${entries.join(',')}}';
  }
  // Numbers and `None` fall through the macro's `{{ value }}` branch.
  return functionGemmaScalar(value);
}