fix: add EmbedTypeConverter with unknown handling
Prevents messages with an unknown EmbedType from failing to unmarshal
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
#pragma warning disable CS1591
|
||||
#pragma warning disable CS1591
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Discord.Net.Converters;
|
||||
|
||||
namespace Discord.API
|
||||
{
|
||||
@@ -15,7 +15,7 @@ namespace Discord.API
|
||||
public string Url { get; set; }
|
||||
[JsonProperty("color")]
|
||||
public uint? Color { get; set; }
|
||||
[JsonProperty("type"), JsonConverter(typeof(StringEnumConverter))]
|
||||
[JsonProperty("type"), JsonConverter(typeof(EmbedTypeConverter))]
|
||||
public EmbedType Type { get; set; }
|
||||
[JsonProperty("timestamp")]
|
||||
public DateTimeOffset? Timestamp { get; set; }
|
||||
|
||||
@@ -77,6 +77,8 @@ namespace Discord.Net.Converters
|
||||
return PermissionTargetConverter.Instance;
|
||||
if (type == typeof(UserStatus))
|
||||
return UserStatusConverter.Instance;
|
||||
if (type == typeof(EmbedType))
|
||||
return EmbedTypeConverter.Instance;
|
||||
|
||||
//Special
|
||||
if (type == typeof(API.Image))
|
||||
|
||||
73
src/Discord.Net.Rest/Net/Converters/EmbedTypeConverter.cs
Normal file
73
src/Discord.Net.Rest/Net/Converters/EmbedTypeConverter.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Discord.Net.Converters
|
||||
{
|
||||
internal class EmbedTypeConverter : JsonConverter
|
||||
{
|
||||
public static readonly EmbedTypeConverter Instance = new EmbedTypeConverter();
|
||||
|
||||
public override bool CanConvert(Type objectType) => true;
|
||||
public override bool CanRead => true;
|
||||
public override bool CanWrite => true;
|
||||
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
switch ((string)reader.Value)
|
||||
{
|
||||
case "rich":
|
||||
return EmbedType.Rich;
|
||||
case "link":
|
||||
return EmbedType.Link;
|
||||
case "video":
|
||||
return EmbedType.Video;
|
||||
case "image":
|
||||
return EmbedType.Image;
|
||||
case "gifv":
|
||||
return EmbedType.Gifv;
|
||||
case "article":
|
||||
return EmbedType.Article;
|
||||
case "tweet":
|
||||
return EmbedType.Tweet;
|
||||
case "html":
|
||||
return EmbedType.Html;
|
||||
case "application_news": // TODO 2.2 EmbedType.News
|
||||
default:
|
||||
return EmbedType.Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
||||
{
|
||||
switch ((EmbedType)value)
|
||||
{
|
||||
case EmbedType.Rich:
|
||||
writer.WriteValue("rich");
|
||||
break;
|
||||
case EmbedType.Link:
|
||||
writer.WriteValue("link");
|
||||
break;
|
||||
case EmbedType.Video:
|
||||
writer.WriteValue("video");
|
||||
break;
|
||||
case EmbedType.Image:
|
||||
writer.WriteValue("image");
|
||||
break;
|
||||
case EmbedType.Gifv:
|
||||
writer.WriteValue("gifv");
|
||||
break;
|
||||
case EmbedType.Article:
|
||||
writer.WriteValue("article");
|
||||
break;
|
||||
case EmbedType.Tweet:
|
||||
writer.WriteValue("tweet");
|
||||
break;
|
||||
case EmbedType.Html:
|
||||
writer.WriteValue("html");
|
||||
break;
|
||||
default:
|
||||
throw new JsonSerializationException("Invalid embed type");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user