// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of "dart:core";

// Examples can assume:
// late StringSink sink;

abstract interface class StringSink {
  /// Writes the string representation of [object].
  ///
  /// Converts [object] to a string using `object.toString()`.
  ///
  /// Notice that calling `sink.write(null)` will will write the `"null"`
  /// string.
  void write(Object? object);

  /// Writes the elements of [objects] separated by [separator].
  ///
  /// Writes the string representation of every element of [objects],
  /// in iteration order, and writes [separator] between any two elements.
  ///
  /// ```dart
  /// sink.writeAll(["Hello", "World"], " Beautiful ");
  /// ```
  /// is equivalent to:
  /// ```dart
  /// sink
  ///   ..write("Hello");
  ///   ..write(" Beautiful ");
  ///   ..write("World");
  /// ```
  void writeAll(Iterable<dynamic> objects, [String separator = ""]);

  /// Writes the string representation of [object] followed by a newline.
  ///
  /// Equivalent to `buffer.write(object)` followed by `buffer.write("\n")`.
  ///
  /// Notice that calling `buffer.writeln(null)` will write the `"null"` string
  /// before the newline. Omitting the argument, or explicitly passing an empty
  /// string, is the recommended way to emit just the newline.
  void writeln([Object? object = ""]);

  /// Writes a string containing the character with code point [charCode].
  ///
  /// Equivalent to `write(String.fromCharCode(charCode))`.
  void writeCharCode(int charCode);
}
