using System.Collections.Generic; using Serilog.Core; using Serilog.Events; namespace PluralKit.Core { public class PatchObjectDestructuring: IDestructuringPolicy { public bool TryDestructure(object value, ILogEventPropertyValueFactory factory, out LogEventPropertyValue result) { result = null; if (!(value is PatchObject po)) return false; var propList = new List(); foreach (var props in po.GetType().GetProperties()) { var propValue = props.GetValue(po); if (propValue is IPartial p && p.IsPresent) propList.Add(new LogEventProperty(props.Name, factory.CreatePropertyValue(p.RawValue))); else if (!(propValue is IPartial)) propList.Add(new LogEventProperty(props.Name, factory.CreatePropertyValue(propValue))); } result = new StructureValue(propList); return true; } } }