diff --git a/Craftimizer/Configuration.cs b/Craftimizer/Configuration.cs index 7eda6ce..c903f9b 100644 --- a/Craftimizer/Configuration.cs +++ b/Craftimizer/Configuration.cs @@ -1,5 +1,6 @@ using Craftimizer.Simulator.Actions; using Craftimizer.Solver; +using Craftimizer.Utils; using Dalamud.Configuration; using Newtonsoft.Json; using System; @@ -84,7 +85,9 @@ public class Configuration : IPluginConfiguration public IReadOnlyList Macros => macros; public int ReliabilitySimulationCount { get; set; } = 500; public bool ConditionRandomness { get; set; } = true; + [JsonConverter(typeof(PopulateConverter))] public SolverConfig SimulatorSolverConfig { get; set; } = SolverConfig.SimulatorDefault; + [JsonConverter(typeof(PopulateConverter))] public SolverConfig SynthHelperSolverConfig { get; set; } = SolverConfig.SynthHelperDefault; public bool EnableSynthHelper { get; set; } = true; public bool ShowOptimalMacroStat { get; set; } = true; diff --git a/Craftimizer/Utils/PopulateConverter.cs b/Craftimizer/Utils/PopulateConverter.cs new file mode 100644 index 0000000..2300abe --- /dev/null +++ b/Craftimizer/Utils/PopulateConverter.cs @@ -0,0 +1,22 @@ +using Newtonsoft.Json; +using System; + +namespace Craftimizer.Utils; + +public class PopulateConverter : JsonConverter +{ + public override bool CanConvert(Type objectType) => + objectType.GetConstructor(Type.EmptyTypes) != null; + + public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) + { + existingValue ??= Activator.CreateInstance(objectType) ?? throw new ArgumentException($"Could not create object of type {objectType}", nameof(objectType)); + serializer.Populate(reader, existingValue); + return existingValue; + } + + public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) + { + serializer.Serialize(writer, value); + } +}