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 System;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Converters;
|
using Discord.Net.Converters;
|
||||||
|
|
||||||
namespace Discord.API
|
namespace Discord.API
|
||||||
{
|
{
|
||||||
@@ -15,7 +15,7 @@ namespace Discord.API
|
|||||||
public string Url { get; set; }
|
public string Url { get; set; }
|
||||||
[JsonProperty("color")]
|
[JsonProperty("color")]
|
||||||
public uint? Color { get; set; }
|
public uint? Color { get; set; }
|
||||||
[JsonProperty("type"), JsonConverter(typeof(StringEnumConverter))]
|
[JsonProperty("type"), JsonConverter(typeof(EmbedTypeConverter))]
|
||||||
public EmbedType Type { get; set; }
|
public EmbedType Type { get; set; }
|
||||||
[JsonProperty("timestamp")]
|
[JsonProperty("timestamp")]
|
||||||
public DateTimeOffset? Timestamp { get; set; }
|
public DateTimeOffset? Timestamp { get; set; }
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ namespace Discord.Net.Converters
|
|||||||
return PermissionTargetConverter.Instance;
|
return PermissionTargetConverter.Instance;
|
||||||
if (type == typeof(UserStatus))
|
if (type == typeof(UserStatus))
|
||||||
return UserStatusConverter.Instance;
|
return UserStatusConverter.Instance;
|
||||||
|
if (type == typeof(EmbedType))
|
||||||
|
return EmbedTypeConverter.Instance;
|
||||||
|
|
||||||
//Special
|
//Special
|
||||||
if (type == typeof(API.Image))
|
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