namespace Spectre.Console;
///
/// A console recorder used to record output from a console.
///
public class Recorder : IAnsiConsole, IDisposable
{
private readonly IAnsiConsole _console;
private readonly List _recorded;
///
public Profile Profile => _console.Profile;
///
public IAnsiConsoleCursor Cursor => _console.Cursor;
///
public IAnsiConsoleInput Input => _console.Input;
///
public IExclusivityMode ExclusivityMode => _console.ExclusivityMode;
///
public RenderPipeline Pipeline => _console.Pipeline;
///
/// Initializes a new instance of the class.
///
/// The console to record output for.
public Recorder(IAnsiConsole console)
{
_console = console ?? throw new ArgumentNullException(nameof(console));
_recorded = new List();
}
///
[SuppressMessage("Usage", "CA1816:Dispose methods should call SuppressFinalize")]
public void Dispose()
{
// Only used for scoping.
}
///
public void Clear(bool home)
{
_console.Clear(home);
}
///
public void Write(IRenderable renderable)
{
if (renderable is null)
{
throw new ArgumentNullException(nameof(renderable));
}
_recorded.Add(renderable);
_console.Write(renderable);
}
internal Recorder Clone(IAnsiConsole console)
{
var recorder = new Recorder(console);
recorder._recorded.AddRange(_recorded);
return recorder;
}
///
/// Exports the recorded data.
///
/// The encoder.
/// The recorded data represented as a string.
public string Export(IAnsiConsoleEncoder encoder)
{
if (encoder is null)
{
throw new ArgumentNullException(nameof(encoder));
}
return encoder.Encode(_console, _recorded);
}
}