stringify method

String stringify(
  1. Object? object, {
  2. bool asStringLiteral = false,
})

Print an object to a string.

Implementation

String stringify(Object? object, {bool asStringLiteral = false}) {
  final output = StringBuffer();
  if (object is String) {
    if (asStringLiteral) {
      return "'$object'";
    } else {
      return object;
    }
  } else if (object is Iterable) {
    if (object.isNotEmpty) {
      output.writeln(listStart);
      ++_curIndentCount;
      for (var i = 0; i < object.length; ++i) {
        final item = object.elementAt(i);
        output.write(_curIndent());
        final itemString = stringify(item, asStringLiteral: true);
        output.write(itemString);
        if (i < object.length - 1) {
          output.write(comma);
        }
        output.writeln();
      }
      --_curIndentCount;
      output.write(_curIndent());
      output.write(listEnd);
    } else {
      output.write('$listStart$listEnd');
    }
  } else if (object is Map) {
    if (object.isNotEmpty) {
      output.writeln(structStart);
      ++_curIndentCount;
      final keys = object.keys.toList();
      for (var i = 0; i < keys.length; ++i) {
        output.write(_curIndent());
        final key = keys[i];
        final value = object[key];
        final keyString = stringify(key);
        final valueString = stringify(value);
        if (i < keys.length - 1) {
          output.write('$keyString: $valueString');
          output.writeln('$comma ');
        } else {
          output.writeln('$keyString: $valueString');
        }
      }
      --_curIndentCount;
      output.write(_curIndent());
      output.write(structEnd);
    } else {
      output.write('$structStart$structEnd');
    }
  } else if (object is HTStruct) {
    if (object.isNotEmpty) {
      final structString = _stringifyStruct(object);
      output.write(structString);
    } else {
      output.write('$structStart$structEnd');
    }
  } else if (object is HTClass) {
    output.write('$kClass ${object.id}');
  } else if (object is HTInstance) {
    output.write(object.toString());
  } else if (object is HTFunction) {
    output.write('$kFunction ${object.internalName}');
  } else if (object is HTType) {
    final typeString = _stringifyType(object, showTypeKeyword: true);
    output.write(typeString);
  } else {
    output.write(object.toString());
  }
  return output.toString();
}