Class DataObjectResolver

java.lang.Object
io.github.kaktushose.jdac.message.resolver.DataObjectResolver
All Implemented Interfaces:
Resolver<DataObject>

public final class DataObjectResolver extends Object implements Resolver<DataObject>

Resolver implementation that is capable of resolving JDAs DataObject.

Will traverse the DataObject down to every textual JSON node and will resolve all the fields that were configured at the constructor.

DataObject object = DataObject.fromJson("""
        {
            "resolve": "my-key",
            "skip": "not resolved"
        }
        """);
DataObjectResolver objectResolver = new DataObjectResolver(messageResolver, Set.of("resolve"));
object = objectResolver.resolve(object, Locale.ENGLISH, Map.of());

Note that many JDA objects can be directly serialized as and deserialized from a DataObject.

  • Constructor Details

    • DataObjectResolver

      public DataObjectResolver(Resolver<String> resolver, Set<String> fields)
      Constructs a new DataObjectResolver.
      Parameters:
      resolver - a Resolver capable of resolving Strings
      fields - the JSON fields to resolve. An empty Set indicates that all fields will be resolved
  • Method Details

    • resolve

      public DataObject resolve(DataObject object, Locale locale, Map<String, @Nullable Object> placeholders)
      Resolves a DataObject.
      Specified by:
      resolve in interface Resolver<DataObject>
      Parameters:
      object - the DataObject to resolve
      locale - the Locale to use for localization
      placeholders - the placeholders to use if supported by the used String Resolver
      Returns:
      the resolved DataObject
    • priority

      public int priority()
      Description copied from interface: Resolver

      The priority of this resolver influences the order in which resolver are applied in a resolution pipeline.

      Currently, this only applies to Resolver<String>, when using MessageResolver (as JDA-Commands does internally). Generally speaking, resolvers with lower priority run first.

      If the priority isn't important (e.g. for ComponentResolver) this should return 0.

      Specified by:
      priority in interface Resolver<DataObject>
      Returns:
      0