From b6467ec86f69477bfc53f6f585d0d8279c4d13bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 21 Aug 2024 19:17:36 +0200 Subject: [PATCH] Extract most I/O methods from Terminal{Reader,Writer} to TerminalIOExtensions. Part of #193. --- src/core/IO/TerminalIOExtensions.cs | 206 ++++++++++++++++++++++++++++ src/core/IO/TerminalReader.cs | 47 ------- src/core/IO/TerminalWriter.cs | 113 --------------- src/core/PublicAPI.Unshipped.txt | 39 +++--- src/core/Terminal.cs | 74 +++++----- src/core/VirtualTerminal.cs | 74 +++++----- 6 files changed, 300 insertions(+), 253 deletions(-) create mode 100644 src/core/IO/TerminalIOExtensions.cs diff --git a/src/core/IO/TerminalIOExtensions.cs b/src/core/IO/TerminalIOExtensions.cs new file mode 100644 index 0000000..6fcb0a7 --- /dev/null +++ b/src/core/IO/TerminalIOExtensions.cs @@ -0,0 +1,206 @@ +// SPDX-License-Identifier: 0BSD + +namespace Vezel.Cathode.IO; + +public static class TerminalIOExtensions +{ + public static int Read(this TerminalReader reader, scoped Span value) + { + Check.Null(reader); + + var count = 0; + + while (count < value.Length) + { + var ret = reader.ReadPartial(value[count..]); + + // EOF? + if (ret == 0) + break; + + count += ret; + } + + return count; + } + + public static ValueTask ReadAsync( + this TerminalReader reader, Memory value, CancellationToken cancellationToken = default) + { + Check.Null(reader); + + return ReadAsync(); + + [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))] + async ValueTask ReadAsync() + { + var count = 0; + + while (count < value.Length) + { + var ret = await reader.ReadPartialAsync(value[count..], cancellationToken).ConfigureAwait(false); + + // EOF? + if (ret == 0) + break; + + count += ret; + } + + return count; + } + } + + public static string? ReadLine(this TerminalReader reader) + { + Check.Null(reader); + + return reader.TextReader.ReadLine(); + } + + public static ValueTask ReadLineAsync( + this TerminalReader reader, CancellationToken cancellationToken = default) + { + Check.Null(reader); + + return reader.TextReader.ReadLineAsync(cancellationToken); + } + + public static void Write(this TerminalWriter writer, T value) + { + writer.Write((value?.ToString()).AsSpan()); + } + + public static void Write(this TerminalWriter writer, scoped ReadOnlySpan value) + { + Check.Null(writer); + + for (var count = 0; count < value.Length; count += writer.WritePartial(value[count..])) + { + } + } + + public static void Write(this TerminalWriter writer, scoped ReadOnlySpan value) + { + var encoding = Terminal.Encoding; + var len = encoding.GetByteCount(value); + var array = ArrayPool.Shared.Rent(len); + + try + { + var span = array.AsSpan(..len); + + _ = encoding.GetBytes(value, span); + + writer.Write(span); + } + finally + { + ArrayPool.Shared.Return(array); + } + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, T value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync((value?.ToString()).AsMemory(), cancellationToken); + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, ReadOnlyMemory value, CancellationToken cancellationToken = default) + { + Check.Null(writer); + + return WriteAsync(); + + [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder))] + async ValueTask WriteAsync() + { + for (var count = 0; + count < value.Length; + count += await writer.WritePartialAsync(value[count..], cancellationToken).ConfigureAwait(false)) + { + } + } + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, Memory value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync((ReadOnlyMemory)value, cancellationToken); + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, byte[]? value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync(value.AsMemory(), cancellationToken); + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, ReadOnlyMemory value, CancellationToken cancellationToken = default) + { + Check.Null(writer); + + return WriteAsync(); + + [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder))] + async ValueTask WriteAsync() + { + var encoding = Terminal.Encoding; + var len = encoding.GetByteCount(value.Span); + var array = ArrayPool.Shared.Rent(len); + + try + { + var mem = array.AsMemory(..len); + + _ = encoding.GetBytes(value.Span, mem.Span); + + await writer.WriteAsync(mem, cancellationToken).ConfigureAwait(false); + } + finally + { + ArrayPool.Shared.Return(array); + } + } + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, Memory value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync((ReadOnlyMemory)value, cancellationToken); + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, char[]? value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync(value.AsMemory(), cancellationToken); + } + + public static ValueTask WriteAsync( + this TerminalWriter writer, string? value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync(value.AsMemory(), cancellationToken); + } + + public static void WriteLine(this TerminalWriter writer) + { + writer.WriteLine(string.Empty); + } + + public static void WriteLine(this TerminalWriter writer, T value) + { + writer.Write(value?.ToString() + Environment.NewLine); + } + + public static ValueTask WriteLineAsync(this TerminalWriter writer, CancellationToken cancellationToken = default) + { + return writer.WriteLineAsync(string.Empty, cancellationToken); + } + + public static ValueTask WriteLineAsync( + this TerminalWriter writer, T value, CancellationToken cancellationToken = default) + { + return writer.WriteAsync(value?.ToString() + Environment.NewLine, cancellationToken); + } +} diff --git a/src/core/IO/TerminalReader.cs b/src/core/IO/TerminalReader.cs index 3a208f1..fc4f0f5 100644 --- a/src/core/IO/TerminalReader.cs +++ b/src/core/IO/TerminalReader.cs @@ -30,51 +30,4 @@ public async ValueTask ReadPartialAsync(Memory buffer, CancellationTo return count; } - - public int Read(scoped Span value) - { - var count = 0; - - while (count < value.Length) - { - var ret = ReadPartial(value[count..]); - - // EOF? - if (ret == 0) - break; - - count += ret; - } - - return count; - } - - [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))] - public async ValueTask ReadAsync(Memory value, CancellationToken cancellationToken = default) - { - var count = 0; - - while (count < value.Length) - { - var ret = await ReadPartialAsync(value[count..], cancellationToken).ConfigureAwait(false); - - // EOF? - if (ret == 0) - break; - - count += ret; - } - - return count; - } - - public string? ReadLine() - { - return TextReader.ReadLine(); - } - - public ValueTask ReadLineAsync(CancellationToken cancellationToken = default) - { - return TextReader.ReadLineAsync(cancellationToken); - } } diff --git a/src/core/IO/TerminalWriter.cs b/src/core/IO/TerminalWriter.cs index 0294c2c..fe77d20 100644 --- a/src/core/IO/TerminalWriter.cs +++ b/src/core/IO/TerminalWriter.cs @@ -32,117 +32,4 @@ public async ValueTask WritePartialAsync( return count; } - - public void Write(scoped ReadOnlySpan value) - { - for (var count = 0; count < value.Length; count += WritePartial(value[count..])) - { - } - } - - [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder))] - public async ValueTask WriteAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) - { - for (var count = 0; - count < value.Length; - count += await WritePartialAsync(value[count..], cancellationToken).ConfigureAwait(false)) - { - } - } - - public ValueTask WriteAsync(Memory value, CancellationToken cancellationToken = default) - { - return WriteAsync((ReadOnlyMemory)value, cancellationToken); - } - - public ValueTask WriteAsync(byte[]? value, CancellationToken cancellationToken = default) - { - return WriteAsync(value.AsMemory(), cancellationToken); - } - - public void Write(scoped ReadOnlySpan value) - { - var encoding = Terminal.Encoding; - var len = encoding.GetByteCount(value); - var array = ArrayPool.Shared.Rent(len); - - try - { - var span = array.AsSpan(..len); - - _ = encoding.GetBytes(value, span); - - Write(span); - } - finally - { - ArrayPool.Shared.Return(array); - } - } - - [AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder))] - public async ValueTask WriteAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) - { - var encoding = Terminal.Encoding; - var len = encoding.GetByteCount(value.Span); - var array = ArrayPool.Shared.Rent(len); - - try - { - var mem = array.AsMemory(..len); - - _ = encoding.GetBytes(value.Span, mem.Span); - - await WriteAsync(mem, cancellationToken).ConfigureAwait(false); - } - finally - { - ArrayPool.Shared.Return(array); - } - } - - public ValueTask WriteAsync(Memory value, CancellationToken cancellationToken = default) - { - return WriteAsync((ReadOnlyMemory)value, cancellationToken); - } - - public ValueTask WriteAsync(char[]? value, CancellationToken cancellationToken = default) - { - return WriteAsync(value.AsMemory(), cancellationToken); - } - - public ValueTask WriteAsync(string? value, CancellationToken cancellationToken = default) - { - return WriteAsync(value.AsMemory(), cancellationToken); - } - - public void Write(T value) - { - Write((value?.ToString()).AsSpan()); - } - - public ValueTask WriteAsync(T value, CancellationToken cancellationToken = default) - { - return WriteAsync((value?.ToString()).AsMemory(), cancellationToken); - } - - public void WriteLine() - { - WriteLine(string.Empty); - } - - public ValueTask WriteLineAsync(CancellationToken cancellationToken = default) - { - return WriteLineAsync(string.Empty, cancellationToken); - } - - public void WriteLine(T value) - { - Write(value?.ToString() + Environment.NewLine); - } - - public ValueTask WriteLineAsync(T value, CancellationToken cancellationToken = default) - { - return WriteAsync(value?.ToString() + Environment.NewLine, cancellationToken); - } } diff --git a/src/core/PublicAPI.Unshipped.txt b/src/core/PublicAPI.Unshipped.txt index 1e56029..965d206 100644 --- a/src/core/PublicAPI.Unshipped.txt +++ b/src/core/PublicAPI.Unshipped.txt @@ -90,6 +90,25 @@ override Vezel.Cathode.IO.TerminalOutputStream.CanWrite.get -> bool override Vezel.Cathode.IO.TerminalOutputStream.Write(System.ReadOnlySpan buffer) -> void override Vezel.Cathode.IO.TerminalOutputStream.WriteAsync(System.ReadOnlyMemory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask override Vezel.Cathode.Text.Control.ControlBuilder.ToString() -> string! +static Vezel.Cathode.IO.TerminalIOExtensions.Read(this Vezel.Cathode.IO.TerminalReader! reader, scoped System.Span value) -> int +static Vezel.Cathode.IO.TerminalIOExtensions.ReadAsync(this Vezel.Cathode.IO.TerminalReader! reader, System.Memory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.ReadLine(this Vezel.Cathode.IO.TerminalReader! reader) -> string? +static Vezel.Cathode.IO.TerminalIOExtensions.ReadLineAsync(this Vezel.Cathode.IO.TerminalReader! reader, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.Write(this Vezel.Cathode.IO.TerminalWriter! writer, scoped System.ReadOnlySpan value) -> void +static Vezel.Cathode.IO.TerminalIOExtensions.Write(this Vezel.Cathode.IO.TerminalWriter! writer, scoped System.ReadOnlySpan value) -> void +static Vezel.Cathode.IO.TerminalIOExtensions.Write(this Vezel.Cathode.IO.TerminalWriter! writer, T value) -> void +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, byte[]? value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, char[]? value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, string? value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, System.Memory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, System.Memory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, System.ReadOnlyMemory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, System.ReadOnlyMemory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteAsync(this Vezel.Cathode.IO.TerminalWriter! writer, T value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteLine(this Vezel.Cathode.IO.TerminalWriter! writer) -> void +static Vezel.Cathode.IO.TerminalIOExtensions.WriteLine(this Vezel.Cathode.IO.TerminalWriter! writer, T value) -> void +static Vezel.Cathode.IO.TerminalIOExtensions.WriteLineAsync(this Vezel.Cathode.IO.TerminalWriter! writer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask +static Vezel.Cathode.IO.TerminalIOExtensions.WriteLineAsync(this Vezel.Cathode.IO.TerminalWriter! writer, T value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask static Vezel.Cathode.Processes.ChildProcess.Run(string! fileName, params string![]! arguments) -> Vezel.Cathode.Processes.ChildProcess! static Vezel.Cathode.Processes.ChildProcess.Run(string! fileName, System.Collections.Generic.IEnumerable! arguments) -> Vezel.Cathode.Processes.ChildProcess! static Vezel.Cathode.Processes.ChildProcess.RunIn(string! workingDirectory, string! fileName, params string![]! arguments) -> Vezel.Cathode.Processes.ChildProcess! @@ -233,6 +252,7 @@ Vezel.Cathode.IO.TerminalHandle.TerminalHandle() -> void Vezel.Cathode.IO.TerminalInputStream Vezel.Cathode.IO.TerminalInputStream.Reader.get -> Vezel.Cathode.IO.TerminalReader! Vezel.Cathode.IO.TerminalInputStream.TerminalInputStream(Vezel.Cathode.IO.TerminalReader! reader) -> void +Vezel.Cathode.IO.TerminalIOExtensions Vezel.Cathode.IO.TerminalNotAttachedException Vezel.Cathode.IO.TerminalNotAttachedException.TerminalNotAttachedException() -> void Vezel.Cathode.IO.TerminalNotAttachedException.TerminalNotAttachedException(string? message) -> void @@ -242,10 +262,6 @@ Vezel.Cathode.IO.TerminalOutputStream.TerminalOutputStream(Vezel.Cathode.IO.Term Vezel.Cathode.IO.TerminalOutputStream.Writer.get -> Vezel.Cathode.IO.TerminalWriter! Vezel.Cathode.IO.TerminalReader Vezel.Cathode.IO.TerminalReader.InputRead -> System.Buffers.SpanAction? -Vezel.Cathode.IO.TerminalReader.Read(scoped System.Span value) -> int -Vezel.Cathode.IO.TerminalReader.ReadAsync(System.Memory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalReader.ReadLine() -> string? -Vezel.Cathode.IO.TerminalReader.ReadLineAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask Vezel.Cathode.IO.TerminalReader.ReadPartial(scoped System.Span buffer) -> int Vezel.Cathode.IO.TerminalReader.ReadPartialAsync(System.Memory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask Vezel.Cathode.IO.TerminalReader.TerminalReader() -> void @@ -253,21 +269,6 @@ Vezel.Cathode.IO.TerminalStream Vezel.Cathode.IO.TerminalWriter Vezel.Cathode.IO.TerminalWriter.OutputWritten -> System.Buffers.ReadOnlySpanAction? Vezel.Cathode.IO.TerminalWriter.TerminalWriter() -> void -Vezel.Cathode.IO.TerminalWriter.Write(scoped System.ReadOnlySpan value) -> void -Vezel.Cathode.IO.TerminalWriter.Write(scoped System.ReadOnlySpan value) -> void -Vezel.Cathode.IO.TerminalWriter.Write(T value) -> void -Vezel.Cathode.IO.TerminalWriter.WriteAsync(byte[]? value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(char[]? value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(string? value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(System.Memory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(System.Memory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(System.ReadOnlyMemory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(System.ReadOnlyMemory value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteAsync(T value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteLine() -> void -Vezel.Cathode.IO.TerminalWriter.WriteLine(T value) -> void -Vezel.Cathode.IO.TerminalWriter.WriteLineAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask -Vezel.Cathode.IO.TerminalWriter.WriteLineAsync(T value, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask Vezel.Cathode.IO.TerminalWriter.WritePartial(scoped System.ReadOnlySpan buffer) -> int Vezel.Cathode.IO.TerminalWriter.WritePartialAsync(System.ReadOnlyMemory buffer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.ValueTask Vezel.Cathode.Processes.ChildProcess diff --git a/src/core/Terminal.cs b/src/core/Terminal.cs index 0e7d31f..68226eb 100644 --- a/src/core/Terminal.cs +++ b/src/core/Terminal.cs @@ -89,29 +89,39 @@ public static ValueTask ReadAsync(Memory value, CancellationToken can return System.ReadLineAsync(cancellationToken); } + public static void Out(T value) + { + System.Out(value); + } + public static void Out(scoped ReadOnlySpan value) { System.Out(value); } - public static ValueTask OutAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) + public static void Out(scoped ReadOnlySpan value) + { + System.Out(value); + } + + public static ValueTask OutAsync(T value, CancellationToken cancellationToken = default) { return System.OutAsync(value, cancellationToken); } - public static ValueTask OutAsync(Memory value, CancellationToken cancellationToken = default) + public static ValueTask OutAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) { return System.OutAsync(value, cancellationToken); } - public static ValueTask OutAsync(byte[]? value, CancellationToken cancellationToken = default) + public static ValueTask OutAsync(Memory value, CancellationToken cancellationToken = default) { return System.OutAsync(value, cancellationToken); } - public static void Out(scoped ReadOnlySpan value) + public static ValueTask OutAsync(byte[]? value, CancellationToken cancellationToken = default) { - System.Out(value); + return System.OutAsync(value, cancellationToken); } public static ValueTask OutAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) @@ -134,19 +144,14 @@ public static ValueTask OutAsync(string? value, CancellationToken cancellationTo return System.OutAsync(value, cancellationToken); } - public static void Out(T value) - { - System.Out(value); - } - - public static ValueTask OutAsync(T value, CancellationToken cancellationToken = default) + public static void OutLine() { - return System.OutAsync(value, cancellationToken); + System.OutLine(); } - public static void OutLine() + public static void OutLine(T value) { - System.OutLine(); + System.OutLine(value); } public static ValueTask OutLineAsync(CancellationToken cancellationToken = default) @@ -154,14 +159,14 @@ public static ValueTask OutLineAsync(CancellationToken cancellationToken = defau return System.OutLineAsync(cancellationToken); } - public static void OutLine(T value) + public static ValueTask OutLineAsync(T value, CancellationToken cancellationToken = default) { - System.OutLine(value); + return System.OutLineAsync(value, cancellationToken); } - public static ValueTask OutLineAsync(T value, CancellationToken cancellationToken = default) + public static void Error(T value) { - return System.OutLineAsync(value, cancellationToken); + System.Error(value); } public static void Error(scoped ReadOnlySpan value) @@ -169,24 +174,29 @@ public static void Error(scoped ReadOnlySpan value) System.Error(value); } - public static ValueTask ErrorAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) + public static void Error(scoped ReadOnlySpan value) + { + System.Error(value); + } + + public static ValueTask ErrorAsync(T value, CancellationToken cancellationToken = default) { return System.ErrorAsync(value, cancellationToken); } - public static ValueTask ErrorAsync(Memory value, CancellationToken cancellationToken = default) + public static ValueTask ErrorAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) { return System.ErrorAsync(value, cancellationToken); } - public static ValueTask ErrorAsync(byte[]? value, CancellationToken cancellationToken = default) + public static ValueTask ErrorAsync(Memory value, CancellationToken cancellationToken = default) { return System.ErrorAsync(value, cancellationToken); } - public static void Error(scoped ReadOnlySpan value) + public static ValueTask ErrorAsync(byte[]? value, CancellationToken cancellationToken = default) { - System.Error(value); + return System.ErrorAsync(value, cancellationToken); } public static ValueTask ErrorAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) @@ -209,29 +219,19 @@ public static ValueTask ErrorAsync(string? value, CancellationToken cancellation return System.ErrorAsync(value, cancellationToken); } - public static void Error(T value) - { - System.Error(value); - } - - public static ValueTask ErrorAsync(T value, CancellationToken cancellationToken = default) - { - return System.ErrorAsync(value, cancellationToken); - } - public static void ErrorLine() { System.ErrorLine(); } - public static ValueTask ErrorLineAsync(CancellationToken cancellationToken = default) + public static void ErrorLine(T value) { - return System.ErrorLineAsync(cancellationToken); + System.ErrorLine(value); } - public static void ErrorLine(T value) + public static ValueTask ErrorLineAsync(CancellationToken cancellationToken = default) { - System.ErrorLine(value); + return System.ErrorLineAsync(cancellationToken); } public static ValueTask ErrorLineAsync(T value, CancellationToken cancellationToken = default) diff --git a/src/core/VirtualTerminal.cs b/src/core/VirtualTerminal.cs index 9585579..0422281 100644 --- a/src/core/VirtualTerminal.cs +++ b/src/core/VirtualTerminal.cs @@ -50,29 +50,39 @@ public ValueTask ReadAsync(Memory value, CancellationToken cancellati return StandardIn.ReadLineAsync(cancellationToken); } + public void Out(T value) + { + StandardOut.Write(value); + } + public void Out(scoped ReadOnlySpan value) { StandardOut.Write(value); } - public ValueTask OutAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) + public void Out(scoped ReadOnlySpan value) + { + StandardOut.Write(value); + } + + public ValueTask OutAsync(T value, CancellationToken cancellationToken = default) { return StandardOut.WriteAsync(value, cancellationToken); } - public ValueTask OutAsync(Memory value, CancellationToken cancellationToken = default) + public ValueTask OutAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) { return StandardOut.WriteAsync(value, cancellationToken); } - public ValueTask OutAsync(byte[]? value, CancellationToken cancellationToken = default) + public ValueTask OutAsync(Memory value, CancellationToken cancellationToken = default) { return StandardOut.WriteAsync(value, cancellationToken); } - public void Out(scoped ReadOnlySpan value) + public ValueTask OutAsync(byte[]? value, CancellationToken cancellationToken = default) { - StandardOut.Write(value); + return StandardOut.WriteAsync(value, cancellationToken); } public ValueTask OutAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) @@ -95,19 +105,14 @@ public ValueTask OutAsync(string? value, CancellationToken cancellationToken = d return StandardOut.WriteAsync(value, cancellationToken); } - public void Out(T value) - { - StandardOut.Write(value); - } - - public ValueTask OutAsync(T value, CancellationToken cancellationToken = default) + public void OutLine() { - return StandardOut.WriteAsync(value, cancellationToken); + StandardOut.WriteLine(); } - public void OutLine() + public void OutLine(T value) { - StandardOut.WriteLine(); + StandardOut.WriteLine(value); } public ValueTask OutLineAsync(CancellationToken cancellationToken = default) @@ -115,14 +120,14 @@ public ValueTask OutLineAsync(CancellationToken cancellationToken = default) return StandardOut.WriteLineAsync(cancellationToken); } - public void OutLine(T value) + public ValueTask OutLineAsync(T value, CancellationToken cancellationToken = default) { - StandardOut.WriteLine(value); + return StandardOut.WriteLineAsync(value, cancellationToken); } - public ValueTask OutLineAsync(T value, CancellationToken cancellationToken = default) + public void Error(T value) { - return StandardOut.WriteLineAsync(value, cancellationToken); + StandardError.Write(value); } public void Error(scoped ReadOnlySpan value) @@ -130,24 +135,29 @@ public void Error(scoped ReadOnlySpan value) StandardError.Write(value); } - public ValueTask ErrorAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) + public void Error(scoped ReadOnlySpan value) + { + StandardError.Write(value); + } + + public ValueTask ErrorAsync(T value, CancellationToken cancellationToken = default) { return StandardError.WriteAsync(value, cancellationToken); } - public ValueTask ErrorAsync(Memory value, CancellationToken cancellationToken = default) + public ValueTask ErrorAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) { return StandardError.WriteAsync(value, cancellationToken); } - public ValueTask ErrorAsync(byte[]? value, CancellationToken cancellationToken = default) + public ValueTask ErrorAsync(Memory value, CancellationToken cancellationToken = default) { return StandardError.WriteAsync(value, cancellationToken); } - public void Error(scoped ReadOnlySpan value) + public ValueTask ErrorAsync(byte[]? value, CancellationToken cancellationToken = default) { - StandardError.Write(value); + return StandardError.WriteAsync(value, cancellationToken); } public ValueTask ErrorAsync(ReadOnlyMemory value, CancellationToken cancellationToken = default) @@ -170,29 +180,19 @@ public ValueTask ErrorAsync(string? value, CancellationToken cancellationToken = return StandardError.WriteAsync(value, cancellationToken); } - public void Error(T value) - { - StandardError.Write(value); - } - - public ValueTask ErrorAsync(T value, CancellationToken cancellationToken = default) - { - return StandardError.WriteAsync(value, cancellationToken); - } - public void ErrorLine() { StandardError.WriteLine(); } - public ValueTask ErrorLineAsync(CancellationToken cancellationToken = default) + public void ErrorLine(T value) { - return StandardError.WriteLineAsync(cancellationToken); + StandardError.WriteLine(value); } - public void ErrorLine(T value) + public ValueTask ErrorLineAsync(CancellationToken cancellationToken = default) { - StandardError.WriteLine(value); + return StandardError.WriteLineAsync(cancellationToken); } public ValueTask ErrorLineAsync(T value, CancellationToken cancellationToken = default)