Added a no exception mode for the VKV serializers.
This commit is contained in:
parent
82afefd3e7
commit
7cad137f39
@ -1,6 +1,4 @@
|
||||
using Valve.Vkv.ObjectModels;
|
||||
|
||||
namespace Valve.Vkv;
|
||||
namespace Valve.Vkv;
|
||||
|
||||
public static class VkvConvert
|
||||
{
|
||||
@ -21,9 +19,19 @@ public static class VkvConvert
|
||||
|
||||
#region DeserializeNode
|
||||
public static VkvNode? DeserializeNode(StreamReader reader) =>
|
||||
DeserializeNode(reader, VkvOptions.Default, out _, null);
|
||||
public static VkvNode? DeserializeNode(StreamReader reader, VkvOptions options) =>
|
||||
DeserializeNode(reader, options, out _, null);
|
||||
DeserializeNode(reader, VkvOptions.Default);
|
||||
public static VkvNode? DeserializeNode(StreamReader reader, VkvOptions options)
|
||||
{
|
||||
try
|
||||
{
|
||||
return DeserializeNode(reader, options, out _, null);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!options.noExceptions) throw;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static VkvNode? DeserializeNode(StreamReader reader, VkvOptions options, out string name,
|
||||
string? first)
|
||||
@ -113,6 +121,8 @@ public static class VkvConvert
|
||||
#region FromNodeTree
|
||||
public static T? FromNodeTree<T>(VkvNode? node, VkvOptions options) => (T?)FromNodeTree(typeof(T), node, options);
|
||||
public static object? FromNodeTree(Type outputType, VkvNode? node, VkvOptions options)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (node is null) return null;
|
||||
|
||||
@ -120,6 +130,12 @@ public static class VkvConvert
|
||||
else if (node is VkvTreeNode tree) return FromTreeNode(outputType, tree, options);
|
||||
else throw new VkvSerializationException("Unknown VKV node type.");
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!options.noExceptions) throw;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static object? FromSingleNode(Type outputType, VkvSingleNode node)
|
||||
{
|
||||
@ -267,9 +283,19 @@ public static class VkvConvert
|
||||
|
||||
#region SerializeNode
|
||||
public static void SerializeNode(StreamWriter writer, VkvNode? node, string name,
|
||||
VkvOptions options) => SerializeNode(writer, node, name, options, 0);
|
||||
VkvOptions options)
|
||||
{
|
||||
try
|
||||
{
|
||||
SerializeNode(writer, node, name, options, 0);
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!options.noExceptions) throw;
|
||||
}
|
||||
}
|
||||
public static void SerializeNode(StreamWriter writer, VkvNode? node, string name) =>
|
||||
SerializeNode(writer, node, name, VkvOptions.Default, 0);
|
||||
SerializeNode(writer, node, name, VkvOptions.Default);
|
||||
|
||||
private static void SerializeNode(StreamWriter writer, VkvNode? node, string name,
|
||||
VkvOptions options, int indentLevel)
|
||||
@ -342,6 +368,8 @@ public static class VkvConvert
|
||||
#region ToNodeTree
|
||||
public static VkvNode? ToNodeTree(object? obj) => ToNodeTree(obj, VkvOptions.Default);
|
||||
public static VkvNode? ToNodeTree(object? obj, VkvOptions options)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (obj is null) return null;
|
||||
Type type = obj.GetType();
|
||||
@ -411,5 +439,11 @@ public static class VkvConvert
|
||||
|
||||
return tree;
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (!options.noExceptions) throw;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ public record class VkvOptions
|
||||
|
||||
public bool closeWhenFinished;
|
||||
public int indentSize;
|
||||
public bool noExceptions;
|
||||
public bool resetStreamPosition;
|
||||
public bool serializeProperties;
|
||||
public SpacingMode spacing;
|
||||
@ -16,6 +17,7 @@ public record class VkvOptions
|
||||
{
|
||||
closeWhenFinished = true;
|
||||
indentSize = 4;
|
||||
noExceptions = false;
|
||||
resetStreamPosition = false;
|
||||
serializeProperties = true;
|
||||
spacing = SpacingMode.DoubleTab;
|
||||
|
||||
@ -1,6 +1,4 @@
|
||||
using System.Reflection.PortableExecutable;
|
||||
|
||||
namespace Valve.Vkv;
|
||||
namespace Valve.Vkv;
|
||||
|
||||
public class VkvSerializer
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user