* Add parse & tryparse to embedbuilder. * Add tostring extension for embeds * Modify comments * Resolve suggestions * Update src/Discord.Net.Rest/Extensions/StringExtensions.cs Co-authored-by: Quin Lynch <49576606+quinchs@users.noreply.github.com>pull/2250/merge
@@ -3,6 +3,7 @@ using System.Collections.Generic; | |||
using System.Collections.Immutable; | |||
using System.Linq; | |||
using Discord.Utils; | |||
using Newtonsoft.Json; | |||
namespace Discord | |||
{ | |||
@@ -156,6 +157,55 @@ namespace Discord | |||
} | |||
/// <summary> | |||
/// Tries to parse a string into an <see cref="EmbedBuilder"/>. | |||
/// </summary> | |||
/// <param name="json">The json string to parse.</param> | |||
/// <param name="builder">The <see cref="EmbedBuilder"/> with populated values. An empty instance if method returns <see langword="false"/>.</param> | |||
/// <returns><see langword="true"/> if <paramref name="json"/> was succesfully parsed. <see langword="false"/> if not.</returns> | |||
public static bool TryParse(string json, out EmbedBuilder builder) | |||
{ | |||
builder = new EmbedBuilder(); | |||
try | |||
{ | |||
var model = JsonConvert.DeserializeObject<Embed>(json); | |||
if (model is not null) | |||
{ | |||
builder = model.ToEmbedBuilder(); | |||
return true; | |||
} | |||
return false; | |||
} | |||
catch | |||
{ | |||
return false; | |||
} | |||
} | |||
/// <summary> | |||
/// Parses a string into an <see cref="EmbedBuilder"/>. | |||
/// </summary> | |||
/// <param name="json">The json string to parse.</param> | |||
/// <returns>An <see cref="EmbedBuilder"/> with populated values from the passed <paramref name="json"/>.</returns> | |||
/// <exception cref="InvalidOperationException">Thrown if the string passed is not valid json.</exception> | |||
public static EmbedBuilder Parse(string json) | |||
{ | |||
try | |||
{ | |||
var model = JsonConvert.DeserializeObject<Embed>(json); | |||
if (model is not null) | |||
return model.ToEmbedBuilder(); | |||
return new EmbedBuilder(); | |||
} | |||
catch | |||
{ | |||
throw; | |||
} | |||
} | |||
/// <summary> | |||
/// Sets the title of an <see cref="Embed"/>. | |||
/// </summary> | |||
/// <param name="title">The title to be set.</param> | |||
@@ -0,0 +1,47 @@ | |||
using Discord.Net.Converters; | |||
using Newtonsoft.Json; | |||
using System.Linq; | |||
using System; | |||
namespace Discord.Rest | |||
{ | |||
/// <summary> | |||
/// Responsible for formatting certain entities as Json <see langword="string"/>, to reuse later on. | |||
/// </summary> | |||
public static class StringExtensions | |||
{ | |||
private static Lazy<JsonSerializerSettings> _settings = new(() => | |||
{ | |||
var serializer = new JsonSerializerSettings() | |||
{ | |||
ContractResolver = new DiscordContractResolver() | |||
}; | |||
serializer.Converters.Add(new EmbedTypeConverter()); | |||
return serializer; | |||
}); | |||
/// <summary> | |||
/// Gets a Json formatted <see langword="string"/> from an <see cref="EmbedBuilder"/>. | |||
/// </summary> | |||
/// <remarks> | |||
/// See <see cref="EmbedBuilder.TryParse(string, out EmbedBuilder)"/> to parse Json back into embed. | |||
/// </remarks> | |||
/// <param name="builder">The builder to format as Json <see langword="string"/>.</param> | |||
/// <param name="formatting">The formatting in which the Json will be returned.</param> | |||
/// <returns>A Json <see langword="string"/> containing the data from the <paramref name="builder"/>.</returns> | |||
public static string ToJsonString(this EmbedBuilder builder, Formatting formatting = Formatting.Indented) | |||
=> ToJsonString(builder.Build(), formatting); | |||
/// <summary> | |||
/// Gets a Json formatted <see langword="string"/> from an <see cref="Embed"/>. | |||
/// </summary> | |||
/// <remarks> | |||
/// See <see cref="EmbedBuilder.TryParse(string, out EmbedBuilder)"/> to parse Json back into embed. | |||
/// </remarks> | |||
/// <param name="embed">The embed to format as Json <see langword="string"/>.</param> | |||
/// <param name="formatting">The formatting in which the Json will be returned.</param> | |||
/// <returns>A Json <see langword="string"/> containing the data from the <paramref name="embed"/>.</returns> | |||
public static string ToJsonString(this Embed embed, Formatting formatting = Formatting.Indented) | |||
=> JsonConvert.SerializeObject(embed.ToModel(), formatting, _settings.Value); | |||
} | |||
} |