File: ConsoleOutLogItem.cs
Web Access
Project: src\src\nuget-client\src\NuGet.Core\NuGet.Build.Tasks\NuGet.Build.Tasks.csproj (NuGet.Build.Tasks)
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using Microsoft.Build.Framework;
using Newtonsoft.Json;

namespace NuGet.Build.Tasks
{
    /// <summary>
    /// Represents a base class for defining log items sent over <see cref="Console.Out" />.
    /// </summary>
    public abstract class ConsoleOutLogItem
    {
        /// <summary>
        /// Serialization settings for messages.  These should be set to be as fast as possible and not for friendly
        /// display since no user will ever see them.
        /// </summary>
        protected static readonly JsonSerializerSettings SerializerSettings = new JsonSerializerSettings
        {
            DefaultValueHandling = DefaultValueHandling.Ignore,
            NullValueHandling = NullValueHandling.Ignore,
        };

        /// <summary>
        /// Gets or sets the <see cref="ConsoleOutLogMessageType" /> of the message.
        /// </summary>
        public ConsoleOutLogMessageType MessageType { get; set; }

        /// <summary>
        /// Serializes the current object to JSON.
        /// </summary>
        /// <returns>The current object as a JSON string.</returns>
        public abstract string ToJson();

        /// <summary>
        /// Implicitly converts a <see cref="BuildMessageEventArgs" /> object to a <see cref="ConsoleOutLogItem" /> object.
        /// </summary>
        /// <param name="buildMessageEventArgs">The <see cref="BuildMessageEventArgs" /> object to convert.</param>
        public static implicit operator ConsoleOutLogItem(BuildMessageEventArgs buildMessageEventArgs)
        {
            return new ConsoleOutLogMessage
            {
                Importance = (ConsoleOutLogMessage.MessageImportance)buildMessageEventArgs.Importance,
                Message = buildMessageEventArgs.Message,
                MessageType = ConsoleOutLogMessageType.Message,
            };
        }

        /// <summary>
        /// Implicitly converts a <see cref="BuildWarningEventArgs" /> object to a <see cref="ConsoleOutLogItem" /> object.
        /// </summary>
        /// <param name="buildWarningEventArgs">The <see cref="BuildWarningEventArgs" /> object to convert.</param>
        public static implicit operator ConsoleOutLogItem(BuildWarningEventArgs buildWarningEventArgs)
        {
            return new ConsoleOutLogMessage
            {
                Code = buildWarningEventArgs.Code,
                ColumnNumber = buildWarningEventArgs.ColumnNumber,
                EndColumnNumber = buildWarningEventArgs.EndColumnNumber,
                EndLineNumber = buildWarningEventArgs.EndLineNumber,
                File = buildWarningEventArgs.File,
                HelpKeyword = buildWarningEventArgs.HelpKeyword,
                LineNumber = buildWarningEventArgs.LineNumber,
                Message = buildWarningEventArgs.Message,
                MessageType = ConsoleOutLogMessageType.Warning,
                ProjectFile = buildWarningEventArgs.ProjectFile,
                SenderName = buildWarningEventArgs.SenderName,
                Subcategory = buildWarningEventArgs.Subcategory
            };
        }

        /// <summary>
        /// Implicitly converts a <see cref="BuildErrorEventArgs" /> object to a <see cref="ConsoleOutLogItem" /> object.
        /// </summary>
        /// <param name="buildErrorEventArgs">The <see cref="BuildErrorEventArgs" /> object to convert.</param>
        public static implicit operator ConsoleOutLogItem(BuildErrorEventArgs buildErrorEventArgs)
        {
            return new ConsoleOutLogMessage
            {
                Code = buildErrorEventArgs.Code,
                ColumnNumber = buildErrorEventArgs.ColumnNumber,
                EndColumnNumber = buildErrorEventArgs.EndColumnNumber,
                EndLineNumber = buildErrorEventArgs.EndLineNumber,
                File = buildErrorEventArgs.File,
                HelpKeyword = buildErrorEventArgs.HelpKeyword,
                LineNumber = buildErrorEventArgs.LineNumber,
                Message = buildErrorEventArgs.Message,
                MessageType = ConsoleOutLogMessageType.Error,
                ProjectFile = buildErrorEventArgs.ProjectFile,
                SenderName = buildErrorEventArgs.SenderName,
                Subcategory = buildErrorEventArgs.Subcategory,
            };
        }
    }
}