toYaml method

String toYaml({
  1. KeyValueBuilderDef? keyBuilder,
  2. KeyValueBuilderDef? listItemBuilder,
  3. int indent = 0,
  4. bool includeMetaData = true,
  5. String metaDataKey = TSDefaults.metaDataKey,
})

Implementation

String toYaml({
  KeyValueBuilderDef? keyBuilder,
  KeyValueBuilderDef? listItemBuilder,
  int indent = 0,
  bool includeMetaData = true,
  String metaDataKey = TSDefaults.metaDataKey,
}) {
  if (!includeMetaData) {
    remove(metaDataKey);
  }
  keyBuilder ??= (key, value) => key.toSnakeCase();
  final buffer = StringBuffer();
  final prefix = '  ' * indent;
  for (final entry in entries) {
    final rawKey = entry.key.toString();
    final key = keyBuilder(rawKey, entry.value);
    final value = entry.value;
    if (value is Map) {
      buffer.writeln('$prefix$key:');
      buffer.write(value.toYaml(keyBuilder: keyBuilder, indent: indent + 1));
    } else if (value is List) {
      buffer.writeln('$prefix$key:');
      for (final item in value) {
        if (item is Map) {
          buffer.writeln('$prefix- ');
          buffer.write(
            item.toYaml(keyBuilder: keyBuilder, indent: indent + 2),
          );
        } else {
          buffer.writeln(
            '$prefix${listItemBuilder?.call(rawKey, item) ?? '- $item'}',
          );
        }
      }
    } else if (value == null) {
      buffer.writeln('$prefix$key:');
    } else if (value is String && value.contains('\n')) {
      buffer.writeln('$prefix$key: |');
      for (final line in value.split('\n')) {
        buffer.writeln('$prefix  $line');
      }
    } else if (value is String) {
      buffer.writeln('$prefix$key: "$value"');
    } else {
      buffer.writeln('$prefix$key: $value');
    }
  }
  return buffer.toString();
}