// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:io' as io; import 'package:meta/meta.dart'; abstract class Stdio { final List<String> logs = <String>[]; /// Error/warning messages printed to STDERR. @mustCallSuper void printError(String message) { logs.add('[error] $message'); } /// Ordinary STDOUT messages. @mustCallSuper void printStatus(String message) { logs.add('[status] $message'); } /// Debug messages that are only printed in verbose mode. @mustCallSuper void printTrace(String message) { logs.add('[trace] $message'); } /// Write string to STDOUT without trailing newline. @mustCallSuper void write(String message) { logs.add('[write] $message'); } /// Read a line of text from STDIN. String readLineSync(); } /// A logger that will print out trace messages. class VerboseStdio extends Stdio { VerboseStdio({ required this.stdout, required this.stderr, required this.stdin, }); factory VerboseStdio.local() => VerboseStdio( stdout: io.stdout, stderr: io.stderr, stdin: io.stdin, ); final io.Stdout stdout; final io.Stdout stderr; final io.Stdin stdin; @override void printError(String message) { super.printError(message); stderr.writeln(message); } @override void printStatus(String message) { super.printStatus(message); stdout.writeln(message); } @override void printTrace(String message) { super.printTrace(message); stdout.writeln(message); } @override void write(String message) { super.write(message); stdout.write(message); } @override String readLineSync() { return stdin.readLineSync()!; } }