* 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>tags/3.7.0
| @@ -3,6 +3,7 @@ using System.Collections.Generic; | |||||
| using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
| using System.Linq; | using System.Linq; | ||||
| using Discord.Utils; | using Discord.Utils; | ||||
| using Newtonsoft.Json; | |||||
| namespace Discord | namespace Discord | ||||
| { | { | ||||
| @@ -155,6 +156,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> | /// <summary> | ||||
| /// Sets the title of an <see cref="Embed"/>. | /// Sets the title of an <see cref="Embed"/>. | ||||
| /// </summary> | /// </summary> | ||||
| @@ -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); | |||||
| } | |||||
| } | |||||