Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Serilog Sinks Map v2.0.0
BepInEx/core/Serilog.Sinks.Map/netstandard2.0/Serilog.Sinks.Map.dll
Decompiled 3 weeks agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using Microsoft.CodeAnalysis; using Serilog.Configuration; using Serilog.Core; using Serilog.Events; using Serilog.Sinks.Map; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("Serilog.Sinks.Map.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100fb8d13fd344a1c6fe0fe83ef33c1080bf30690765bc6eb0df26ebfdf8f21670c64265b30db09f73a0dea5b3db4c9d18dbf6d5a25af5ce9016f281014d79dc3b4201ac646c451830fc7e61a2dfd633d34c39f87b81894191652df5ac63cc40c77f3542f702bda692e6e8a9158353df189007a49da0f3cfd55eb250066b19485ec")] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("Serilog Contributors")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright © Serilog Contributors")] [assembly: AssemblyDescription("A Serilog sink wrapper that dispatches events based on a property value.")] [assembly: AssemblyFileVersion("2.0.0.0")] [assembly: AssemblyInformationalVersion("2.0.0+5cff06e49235500f641296a4a8e8a56be7788dfe")] [assembly: AssemblyProduct("Serilog.Sinks.Map")] [assembly: AssemblyTitle("Serilog.Sinks.Map")] [assembly: AssemblyVersion("2.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Serilog { public static class MapLoggerConfigurationExtensions { public static LoggerConfiguration Map(this LoggerSinkConfiguration loggerSinkConfiguration, string keyPropertyName, string defaultKey, Action<string, LoggerSinkConfiguration> configure, int? sinkMapCountLimit = null, LogEventLevel restrictedToMinimumLevel = 0, LoggingLevelSwitch? levelSwitch = null) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) string keyPropertyName2 = keyPropertyName; string defaultKey2 = defaultKey; return loggerSinkConfiguration.Map((Func<LogEvent, string>)delegate(LogEvent le) { if (le.Properties.TryGetValue(keyPropertyName2, out var value)) { ScalarValue val = (ScalarValue)(object)((value is ScalarValue) ? value : null); if (val != null) { return val.Value?.ToString() ?? defaultKey2; } } return defaultKey2; }, configure, sinkMapCountLimit, restrictedToMinimumLevel, levelSwitch); } public static LoggerConfiguration Map<TKey>(this LoggerSinkConfiguration loggerSinkConfiguration, string keyPropertyName, TKey defaultKey, Action<TKey, LoggerSinkConfiguration> configure, int? sinkMapCountLimit = null, LogEventLevel restrictedToMinimumLevel = 0, LoggingLevelSwitch? levelSwitch = null) { //IL_0053: Unknown result type (might be due to invalid IL or missing references) string keyPropertyName2 = keyPropertyName; TKey defaultKey2 = defaultKey; if (loggerSinkConfiguration == null) { throw new ArgumentNullException("loggerSinkConfiguration"); } if (keyPropertyName2 == null) { throw new ArgumentNullException("keyPropertyName"); } if (configure == null) { throw new ArgumentNullException("configure"); } return loggerSinkConfiguration.Map(delegate(LogEvent le) { if (le.Properties.TryGetValue(keyPropertyName2, out var value)) { ScalarValue val = (ScalarValue)(object)((value is ScalarValue) ? value : null); if (val != null) { object value2 = val.Value; if (value2 is TKey) { return (TKey)value2; } } } return defaultKey2; }, configure, sinkMapCountLimit, restrictedToMinimumLevel, levelSwitch); } public static LoggerConfiguration Map<TKey>(this LoggerSinkConfiguration loggerSinkConfiguration, Func<LogEvent, TKey> keySelector, Action<TKey, LoggerSinkConfiguration> configure, int? sinkMapCountLimit = null, LogEventLevel restrictedToMinimumLevel = 0, LoggingLevelSwitch? levelSwitch = null) { //IL_006e: Unknown result type (might be due to invalid IL or missing references) Func<LogEvent, TKey> keySelector2 = keySelector; if (loggerSinkConfiguration == null) { throw new ArgumentNullException("loggerSinkConfiguration"); } if (keySelector2 == null) { throw new ArgumentNullException("keySelector"); } if (configure == null) { throw new ArgumentNullException("configure"); } if (sinkMapCountLimit.HasValue && sinkMapCountLimit.GetValueOrDefault() < 0) { throw new ArgumentOutOfRangeException("sinkMapCountLimit"); } return loggerSinkConfiguration.Sink((ILogEventSink)(object)new MappedSink<TKey>((LogEvent logEvent, [MaybeNull] out TKey key) => { key = keySelector2(logEvent); return true; }, configure, sinkMapCountLimit), restrictedToMinimumLevel, levelSwitch); } public static LoggerConfiguration Map(this LoggerSinkConfiguration loggerSinkConfiguration, string keyPropertyName, Action<string?, LoggerSinkConfiguration> configure, int? sinkMapCountLimit = null, LogEventLevel restrictedToMinimumLevel = 0, LoggingLevelSwitch? levelSwitch = null) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) string keyPropertyName2 = keyPropertyName; return loggerSinkConfiguration.Map(delegate(LogEvent le, out string? key) { if (le.Properties.TryGetValue(keyPropertyName2, out var value)) { ScalarValue val = (ScalarValue)(object)((value is ScalarValue) ? value : null); if (val != null) { key = val.Value?.ToString(); return true; } } key = null; return false; }, configure, sinkMapCountLimit, restrictedToMinimumLevel, levelSwitch); } public static LoggerConfiguration Map<TKey>(this LoggerSinkConfiguration loggerSinkConfiguration, string keyPropertyName, Action<TKey, LoggerSinkConfiguration> configure, int? sinkMapCountLimit = null, LogEventLevel restrictedToMinimumLevel = 0, LoggingLevelSwitch? levelSwitch = null) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) string keyPropertyName2 = keyPropertyName; if (loggerSinkConfiguration == null) { throw new ArgumentNullException("loggerSinkConfiguration"); } if (keyPropertyName2 == null) { throw new ArgumentNullException("keyPropertyName"); } if (configure == null) { throw new ArgumentNullException("configure"); } return loggerSinkConfiguration.Map<TKey>(delegate(LogEvent le, out TKey? key) { if (le.Properties.TryGetValue(keyPropertyName2, out var value)) { ScalarValue val = (ScalarValue)(object)((value is ScalarValue) ? value : null); if (val != null && val.Value is TKey val2) { key = val2; return true; } } key = default(TKey); return false; }, configure, sinkMapCountLimit, restrictedToMinimumLevel, levelSwitch); } public static LoggerConfiguration Map<TKey>(this LoggerSinkConfiguration loggerSinkConfiguration, KeySelector<TKey> keySelector, Action<TKey, LoggerSinkConfiguration> configure, int? sinkMapCountLimit = null, LogEventLevel restrictedToMinimumLevel = 0, LoggingLevelSwitch? levelSwitch = null) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (loggerSinkConfiguration == null) { throw new ArgumentNullException("loggerSinkConfiguration"); } if (keySelector == null) { throw new ArgumentNullException("keySelector"); } if (configure == null) { throw new ArgumentNullException("configure"); } if (sinkMapCountLimit.HasValue && sinkMapCountLimit.GetValueOrDefault() < 0) { throw new ArgumentOutOfRangeException("sinkMapCountLimit"); } return loggerSinkConfiguration.Sink((ILogEventSink)(object)new MappedSink<TKey>(keySelector, configure, sinkMapCountLimit), restrictedToMinimumLevel, levelSwitch); } } } namespace Serilog.Sinks.Map { public delegate bool KeySelector<TKey>(LogEvent logEvent, [MaybeNull] out TKey key); internal class MappedSink<TKey> : ILogEventSink, IDisposable { private readonly KeySelector<TKey> _keySelector; private readonly Action<TKey, LoggerSinkConfiguration> _configure; private readonly int? _sinkMapCountLimit; private readonly object _sync = new object(); private readonly Dictionary<KeyValuePair<TKey, bool>, ILogEventSink> _sinkMap = new Dictionary<KeyValuePair<TKey, bool>, ILogEventSink>(); private bool _disposed; public MappedSink(KeySelector<TKey> keySelector, Action<TKey, LoggerSinkConfiguration> configure, int? sinkMapCountLimit) { _keySelector = keySelector; _configure = configure; _sinkMapCountLimit = sinkMapCountLimit; } public void Emit(LogEvent logEvent) { if (!_keySelector(logEvent, out var key2)) { return; } KeyValuePair<TKey, bool> key = new KeyValuePair<TKey, bool>(key2, value: false); lock (_sync) { if (_disposed) { throw new ObjectDisposedException("MappedSink", "The mapped sink has been disposed."); } if (_sinkMap.TryGetValue(key, out ILogEventSink value)) { value.Emit(logEvent); return; } ILogEventSink val = LoggerSinkConfiguration.CreateSink((Action<LoggerSinkConfiguration>)delegate(LoggerSinkConfiguration wt) { _configure(key.Key, wt); }); if (_sinkMapCountLimit == 0) { using (val as IDisposable) { val.Emit(logEvent); return; } } if (!_sinkMapCountLimit.HasValue || _sinkMapCountLimit > _sinkMap.Count) { _sinkMap[key] = val; val.Emit(logEvent); return; } _sinkMap[key] = val; try { val.Emit(logEvent); } finally { while (_sinkMap.Count > _sinkMapCountLimit.Value) { foreach (KeyValuePair<TKey, bool> key3 in _sinkMap.Keys) { if (!key.Equals(key3)) { ILogEventSink obj = _sinkMap[key3]; _sinkMap.Remove(key3); (obj as IDisposable)?.Dispose(); break; } } } } } } public void Dispose() { lock (_sync) { if (!_disposed) { _disposed = true; ILogEventSink[] array = _sinkMap.Values.ToArray(); _sinkMap.Clear(); ILogEventSink[] array2 = array; for (int i = 0; i < array2.Length; i++) { (array2[i] as IDisposable)?.Dispose(); } } } } } } namespace System.Diagnostics.CodeAnalysis { [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class AllowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class DisallowNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Method, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class DoesNotReturnAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class DoesNotReturnIfAttribute : Attribute { public bool ParameterValue { get; } public DoesNotReturnIfAttribute(bool parameterValue) { ParameterValue = parameterValue; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MaybeNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MaybeNullWhenAttribute : Attribute { public bool ReturnValue { get; } public MaybeNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullAttribute : Attribute { public string[] Members { get; } public MemberNotNullAttribute(string member) { Members = new string[1] { member }; } public MemberNotNullAttribute(params string[] members) { Members = members; } } [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class MemberNotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public string[] Members { get; } public MemberNotNullWhenAttribute(bool returnValue, string member) { ReturnValue = returnValue; Members = new string[1] { member }; } public MemberNotNullWhenAttribute(bool returnValue, params string[] members) { ReturnValue = returnValue; Members = members; } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.ReturnValue, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class NotNullAttribute : Attribute { } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Parameter | AttributeTargets.ReturnValue, AllowMultiple = true, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class NotNullIfNotNullAttribute : Attribute { public string ParameterName { get; } public NotNullIfNotNullAttribute(string parameterName) { ParameterName = parameterName; } } [AttributeUsage(AttributeTargets.Parameter, Inherited = false)] [ExcludeFromCodeCoverage] [DebuggerNonUserCode] internal sealed class NotNullWhenAttribute : Attribute { public bool ReturnValue { get; } public NotNullWhenAttribute(bool returnValue) { ReturnValue = returnValue; } } }