From 2299dc8cca412e78a4cb9efb4fa92522894afd46 Mon Sep 17 00:00:00 2001 From: Christopher F Date: Thu, 15 Mar 2018 14:40:39 -0400 Subject: [PATCH] optimizations on OptionalConverter --- .../Net/Converters/OptionalConverter.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Discord.Net.Rest/Net/Converters/OptionalConverter.cs b/src/Discord.Net.Rest/Net/Converters/OptionalConverter.cs index 8cad967ab..d3d6191c0 100644 --- a/src/Discord.Net.Rest/Net/Converters/OptionalConverter.cs +++ b/src/Discord.Net.Rest/Net/Converters/OptionalConverter.cs @@ -18,15 +18,20 @@ namespace Discord.Net.Converters public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { - object obj; + T obj; + // custom converters need to be able to safely fail; move this check in here to prevent wasteful casting when parsing primitives if (_innerConverter != null) - obj = _innerConverter.ReadJson(reader, typeof(T), null, serializer); + { + object o = _innerConverter.ReadJson(reader, typeof(T), null, serializer); + if (o is Optional) + return o; + + obj = (T)o; + } else obj = serializer.Deserialize(reader); - if (obj is Optional) - return obj; - return new Optional((T)obj); + return new Optional(obj); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)