functionGemmaArgument function
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);
}