blob: a90999659964bcfb1bd1c30a5ffb40d2b0e4cd45 [file] [log] [blame]
// 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()!;
}
}