diff --git a/Engine.Core/Serialization/ISerializer.cs b/Engine.Core/Serialization/ISerializer.cs index 0ada93c..783f2f7 100644 --- a/Engine.Core/Serialization/ISerializer.cs +++ b/Engine.Core/Serialization/ISerializer.cs @@ -4,15 +4,15 @@ namespace Engine.Core.Serialization; public interface ISerializer { - object Deserialize(string configuration); - object Deserialize(string configuration, Type type); - T Deserialize(string configuration); + object Deserialize(string content); + object Deserialize(string content, Type type); + T Deserialize(string content); string Serialize(object instance); - ProgressiveTask DeserializeAsync(string configuration); - ProgressiveTask DeserializeAsync(string configuration, Type type); - ProgressiveTask DeserializeAsync(string configuration); + ProgressiveTask DeserializeAsync(string content); + ProgressiveTask DeserializeAsync(string content, Type type); + ProgressiveTask DeserializeAsync(string content); ProgressiveTask SerializeAsync(object instance); } diff --git a/Engine.Integration/Engine.Integration.Yaml/YamlConfiguration.cs b/Engine.Integration/Engine.Integration.Yaml/YamlConfiguration.cs new file mode 100644 index 0000000..3c18410 --- /dev/null +++ b/Engine.Integration/Engine.Integration.Yaml/YamlConfiguration.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; + +using Engine.Core.Config; + +namespace Engine.Serializers.Yaml; + +public class YamlConfiguration : BasicConfiguration +{ + public readonly string FilePath; + + private readonly YamlSerializer yamlSerializer = new(); + + public YamlConfiguration(string filePath) + { + if (!filePath.EndsWith(".yaml")) + filePath += ".yaml"; + + FilePath = filePath; + + bool isRelativePath = Path.GetFullPath(filePath).CompareTo(filePath) != 0; + + if (isRelativePath) + FilePath = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, filePath)); + + if (Path.GetDirectoryName(FilePath) is string directoryPath) + Directory.CreateDirectory(directoryPath); + + if (!File.Exists(FilePath)) + return; + + string yamlFileText = File.ReadAllText(FilePath); + Dictionary valuePairs = yamlSerializer.Deserialize>(yamlFileText); + + foreach ((string key, string value) in valuePairs) + Set(key, value); + } +} diff --git a/Engine.Integration/Engine.Integration.Yaml/YamlSerializer.cs b/Engine.Integration/Engine.Integration.Yaml/YamlSerializer.cs index 6df1e67..3357040 100644 --- a/Engine.Integration/Engine.Integration.Yaml/YamlSerializer.cs +++ b/Engine.Integration/Engine.Integration.Yaml/YamlSerializer.cs @@ -62,65 +62,65 @@ public class YamlSerializer : Core.Serialization.ISerializer } } - public object Deserialize(string configuration) + public object Deserialize(string content) { lock (Lock) { identifiableRegistry.Reset(); - object result = deserializer.Deserialize(configuration)!; + object result = deserializer.Deserialize(content)!; identifiableRegistry.AssignAll(); return result; } } - public object Deserialize(string configuration, Type type) + public object Deserialize(string content, Type type) { lock (Lock) { identifiableRegistry.Reset(); - object result = deserializer.Deserialize(configuration, type)!; + object result = deserializer.Deserialize(content, type)!; identifiableRegistry.AssignAll(); return result; } } - public T Deserialize(string configuration) + public T Deserialize(string content) { lock (Lock) { identifiableRegistry.Reset(); - T result = deserializer.Deserialize(configuration); + T result = deserializer.Deserialize(content); identifiableRegistry.AssignAll(); return result; } } - public ProgressiveTask DeserializeAsync(string configuration) + public ProgressiveTask DeserializeAsync(string content) { lock (Lock) { progressionTracker.Reset(); - Task task = Task.Run(() => Deserialize(configuration)); + Task task = Task.Run(() => Deserialize(content)); return new ProgressiveTask(progressionTracker, task); } } - public ProgressiveTask DeserializeAsync(string configuration, Type type) + public ProgressiveTask DeserializeAsync(string content, Type type) { lock (Lock) { progressionTracker.Reset(); - Task task = Task.Run(() => Deserialize(configuration, type)); + Task task = Task.Run(() => Deserialize(content, type)); return new ProgressiveTask(progressionTracker, task); } } - public ProgressiveTask DeserializeAsync(string configuration) + public ProgressiveTask DeserializeAsync(string content) { lock (Lock) { progressionTracker.Reset(); - Task task = Task.Run(() => Deserialize(configuration)); + Task task = Task.Run(() => Deserialize(content)); return new ProgressiveTask(progressionTracker, task); } } @@ -135,8 +135,8 @@ public class YamlSerializer : Core.Serialization.ISerializer } } - internal object InternalDeserialize(string configuration, Type type) + internal object InternalDeserialize(string content, Type type) { - return deserializer.Deserialize(configuration, type)!; + return deserializer.Deserialize(content, type)!; } }