using System.Text.RegularExpressions; using NadekoBot.Common.Yml; using NadekoBot.Core.Common.Configs; using YamlDotNet.Serialization; namespace NadekoBot.Core.Common { public class YamlSeria : IConfigSeria { private readonly ISerializer _serializer; private readonly IDeserializer _deserializer; private static readonly Regex CodePointRegex = new Regex(@"(\\U(?[a-zA-Z0-9]{8})|\\u(?[a-zA-Z0-9]{4})|\\x(?[a-zA-Z0-9]{2}))", RegexOptions.Compiled); public YamlSeria() { _serializer = Yaml.Serializer; _deserializer = Yaml.Deserializer; } public string Serialize(T obj) { var escapedOutput = _serializer.Serialize(obj); var output = CodePointRegex.Replace(escapedOutput, me => { var str = me.Groups["code"].Value; var newString = YamlHelper.UnescapeUnicodeCodePoint(str); return newString; }); return output; } public T Deserialize(string data) => _deserializer.Deserialize(data); } }