using System.Buffers; using Spectre.Console.Cli; namespace Geekeey.Extensions.Process.Tests.Dummy.Commands; internal sealed class EchoStdinCommand : AsyncOutputCommand { public sealed class Settings : OutputCommandSettings { [CommandOption("--length")] public long Length { get; init; } = long.MaxValue; } public override async Task ExecuteAsync(CommandContext context, Settings settings) { using var tty = Terminal.Connect(); using var buffer = MemoryPool.Shared.Rent(81920); var count = 0L; while (count < settings.Length) { var bytesWanted = (int)Math.Min(buffer.Memory.Length, settings.Length - count); var bytesRead = await tty.Stdin.BaseStream.ReadAsync(buffer.Memory[..bytesWanted]); if (bytesRead <= 0) break; foreach (var writer in tty.GetWriters(settings.Target)) { await writer.BaseStream.WriteAsync(buffer.Memory[..bytesRead]); } count += bytesRead; } return 0; } }