Dependencies/Pixie/Pixie/LogEntry.cs
using System;
using WasmBox.Pixie.Markup;
namespace WasmBox.Pixie {
/// <summary>
/// Describes a log entry: a self-contained nugget of information.
/// </summary>
public struct LogEntry {
/// <summary>
/// Creates a log entry with the given severity and contents.
/// </summary>
/// <param name="severity">The log entry's severity.</param>
/// <param name="contents">The log entry's contents.</param>
public LogEntry(Severity severity, MarkupNode contents) {
this = default(LogEntry);
this.Severity = severity;
this.Contents = contents;
}
/// <summary>
/// Creates a log entry with the given severity, title and contents.
/// </summary>
/// <param name="severity">The log entry's severity.</param>
/// <param name="title">The log entry's title.</param>
/// <param name="contents">The log entry's contents.</param>
public LogEntry(
Severity severity,
string title,
params MarkupNode[] contents) {
this = default(LogEntry);
this.Severity = severity;
var extendedContents = new MarkupNode[contents.Length + 1];
extendedContents[0] = new Title(title);
Array.Copy(contents, 0, extendedContents, 1, contents.Length);
this.Contents = new Sequence(extendedContents);
}
/// <summary>
/// Creates a log entry with the given severity and contents.
/// </summary>
/// <param name="severity">The log entry's severity.</param>
/// <param name="contents">The log entry's contents.</param>
public LogEntry(Severity severity, params MarkupNode[] contents) {
this = default(LogEntry);
this.Severity = severity;
this.Contents = new Sequence(contents);
}
/// <summary>
/// Gets the severity for this log entry.
/// </summary>
/// <returns>The log entry's severity.</returns>
public Severity Severity { get; private set; }
/// <summary>
/// Gets the markup nodes that make up this log entry's contents.
/// </summary>
/// <returns>The log entry's contents.</returns>
public MarkupNode Contents { get; private set; }
/// <summary>
/// Creates a new log entry by applying a mapping to this
/// log entry's contents.
/// </summary>
/// <param name="mapping">The mapping to apply.</param>
/// <returns>A new log entry.</returns>
public LogEntry Map(Func<MarkupNode, MarkupNode> mapping) {
return new LogEntry(Severity, mapping(Contents));
}
}
}