[Feature] New decoding & encoding system #287
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR Details
What you've changed
Closes #0
Description
Added a new decoding and encoding system for discord.jar. This system is designed for better:
The main difference here is the removal of existing #decompile and #compile methods. These are replaced by a system built with Java Reflection to prevent repeated code and errors.
Documentation
When creating an object, you must implement the
DiscordObject
interface. Then, for each of your fields, you must annotate them with@DiscordObjectParameter
(you can customize the values to your liking). If you want one of your fields to automatically be filled with the DiscordJar instance, you can annotate it with@DiscordJarParameter
, alongside the previous annotation. You must have a constructor annotated with@DiscordObjectConstructor
with the same types as the fields, in the same order.To assign custom values to a key, you may create a static method that takes a JSONObject and returns a HashMap<String, Object> that's annotated with
@DiscordObjectCustomAssignations
.To decompile a JSON payload, use
discordJar.getParser().decompileObject(jsonObject, ExampleObject.class);
An example object might look like this, meaning there's no need for a decompile or compile method:
Status