// Copyright (c) The Geekeey Authors // SPDX-License-Identifier: EUPL-1.2 using System.CommandLine; internal sealed class EchoCommand : Command { private static readonly Option Target = new("--target") { DefaultValueFactory = _ => OutputTarget.StdOut }; private static readonly Option Separator = new("--separator") { DefaultValueFactory = _ => " " }; private static readonly Argument Items = new("line") { Arity = ArgumentArity.ZeroOrMore, DefaultValueFactory = _ => [] }; public EchoCommand() : base("echo") { Add(Target); Add(Separator); Add(Items); SetAction(ExecuteAsync); } public async Task ExecuteAsync(ParseResult result, CancellationToken cancellationToken) { using var output = Output.Connect(); foreach (var writer in output.GetWriters(result.GetValue(Target))) { await writer.WriteLineAsync(string.Join(result.GetRequiredValue(Separator), result.GetRequiredValue(Items))); } return 0; } }