| File: Shared\Utilities\LogTag.cs | Web Access |
| Project: src\src\dotnet-svcutil\lib\src\dotnet-svcutil-lib.csproj (dotnet-svcutil-lib) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; namespace Microsoft.Tools.ServiceModel.Svcutil { /// <summary> /// This class enables communication between the Svcutil and the process that invokes it /// so that process messages can be distiguished between error, warning or just info messages. /// </summary> internal class LogTag { private readonly string _value; private static string s_tagStart = "$"; private static string s_tagEnd = "!#"; private static int s_tagLength = 4; public static LogTag Information { get; } = new LogTag("$I!#"); public static LogTag Important { get; } = new LogTag("$T!#"); public static LogTag Warning { get; } = new LogTag("$W!#"); public static LogTag Error { get; } = new LogTag("$E!#"); public static LogTag LogMessage { get; } = new LogTag("$L!#"); public static LogTag NewLine { get; } = new LogTag("$N!#"); public static LogTag TraceSuccess { get; } = new LogTag("$S!#"); public static LogTag TraceFailure { get; } = new LogTag("$F!#"); public static LogTag TraceProperty { get; } = new LogTag("$P!#"); public static LogTag TraceException { get; } = new LogTag("$X!#"); private LogTag(string tag) { if (string.IsNullOrEmpty(tag) || tag.Length != LogTag.s_tagLength || !tag.StartsWith(s_tagStart, StringComparison.Ordinal) || !tag.EndsWith(s_tagEnd, StringComparison.Ordinal)) { throw new ArgumentException(string.Empty, nameof(tag)); } _value = tag; } // Enable LogTag objects to be treated as strings, but not the opposite to ensure strong type validation for function parameters. public static implicit operator string(LogTag tag) { return tag.ToString(); } public static bool IsTrace(LogTag tag) { return tag == LogTag.TraceSuccess || tag == LogTag.TraceProperty || tag == LogTag.TraceFailure || tag == LogTag.TraceException || tag == LogTag.LogMessage; } public static bool IsTag(string message, out string tag, out string value) { tag = null; value = string.Empty; if (!string.IsNullOrEmpty(message) && message.Length >= LogTag.s_tagLength) { tag = message.Substring(0, LogTag.s_tagLength); if (tag != Important && tag != Information && tag != Warning && tag != Error && tag != LogMessage && tag != TraceSuccess && tag != TraceFailure && tag != TraceProperty && tag != TraceException) { tag = null; } else if (message.Length > tag.Length) { value = message.Substring(tag.Length); } } return tag != null; } public override string ToString() { return _value; } public override int GetHashCode() { return _value.GetHashCode(); } } }