diff --git a/IPA.Loader/Config/Stores/CustomObjectConverter.cs b/IPA.Loader/Config/Stores/CustomObjectConverter.cs index 20465742..e361a3e2 100644 --- a/IPA.Loader/Config/Stores/CustomObjectConverter.cs +++ b/IPA.Loader/Config/Stores/CustomObjectConverter.cs @@ -72,7 +72,7 @@ namespace IPA.Config.Stores.Converters /// the deserialized value /// public override T FromValue(Value value, object parent) - => impl.FromValue(value, parent); + => Deserialize(value, parent); /// /// Serializes into a structure, given . @@ -82,9 +82,14 @@ namespace IPA.Config.Stores.Converters /// the tree that represents /// public override Value ToValue(T obj, object parent) - => impl.ToValue(obj, parent); + => Serialize(obj, parent); } + /// + /// A for custom value types, serialized identically to the reference types serialized with + /// . + /// + /// the type of the value to convert public class CustomValueTypeConverter : ValueConverter where T : struct { private static readonly GeneratedStoreImpl.SerializeObject serialize @@ -92,11 +97,44 @@ namespace IPA.Config.Stores.Converters private static readonly GeneratedStoreImpl.DeserializeObject deserialize = GeneratedStoreImpl.GetDeserializerDelegate(); - public override T FromValue(Value value, object parent) + /// + /// Deserializes into a with the given . + /// + /// the to deserialize + /// the parent object that will own the deserialized value + /// the deserialized value + /// + public static T Deserialize(Value value, object parent) => deserialize(value, parent); - public override Value ToValue(T obj, object parent) + /// + /// Serializes into a corresponding structure. + /// + /// the object to serialize + /// the tree that represents + /// + public static Value Serialize(T obj) => serialize(obj); + + /// + /// Deserializes into a with the given . + /// + /// the to deserialize + /// the parent object that will own the deserialized value + /// the deserialized value + /// + public override T FromValue(Value value, object parent) + => Deserialize(value, parent); + + /// + /// Serializes into a structure, given . + /// + /// the object to serialize + /// the parent object that owns + /// the tree that represents + /// + public override Value ToValue(T obj, object parent) + => Serialize(obj); } } diff --git a/IPA.Loader/Logging/StandardLogger.cs b/IPA.Loader/Logging/StandardLogger.cs index bdf89587..21702e8d 100644 --- a/IPA.Loader/Logging/StandardLogger.cs +++ b/IPA.Loader/Logging/StandardLogger.cs @@ -268,6 +268,10 @@ namespace IPA.Logging [ThreadStatic] private static bool? isOnLoggerThread = null; + /// + /// Whether or not the calling thread is the logger thread. + /// + /// if the current thread is the logger thread, otherwise public static bool IsOnLoggerThread => isOnLoggerThread ??= Thread.CurrentThread.ManagedThreadId == logThread.ManagedThreadId; private static readonly ManualResetEventSlim logWaitEvent = new ManualResetEventSlim(true);