feature: Add Parse & TryParse to EmbedBuilder & Add ToJsonString extension (#2284)
* 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>
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Linq;
|
||||
using Discord.Utils;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
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>
|
||||
/// Sets the title of an <see cref="Embed"/>.
|
||||
/// </summary>
|
||||
|
||||
47
src/Discord.Net.Rest/Extensions/StringExtensions.cs
Normal file
47
src/Discord.Net.Rest/Extensions/StringExtensions.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user