1 package org
.asamk
.signal
.commands
;
3 import com
.fasterxml
.jackson
.core
.type
.TypeReference
;
5 import net
.sourceforge
.argparse4j
.inf
.Namespace
;
7 import org
.asamk
.signal
.OutputType
;
8 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
9 import org
.asamk
.signal
.manager
.Manager
;
10 import org
.asamk
.signal
.util
.Util
;
12 import java
.util
.List
;
16 public interface JsonRpcLocalCommand
extends JsonRpcCommand
<Map
<String
, Object
>>, LocalCommand
{
18 default TypeReference
<Map
<String
, Object
>> getRequestType() {
19 return new TypeReference
<>() {
23 default void handleCommand(Map
<String
, Object
> request
, Manager m
) throws CommandException
{
24 Namespace commandNamespace
= new JsonRpcNamespace(request
== null ? Map
.of() : request
);
25 handleCommand(commandNamespace
, m
);
28 default Set
<OutputType
> getSupportedOutputTypes() {
29 return Set
.of(OutputType
.PLAIN_TEXT
, OutputType
.JSON
);
33 * Namepace implementation, that defaults booleans to false and converts camel case keys to dashed strings
35 final class JsonRpcNamespace
extends Namespace
{
37 public JsonRpcNamespace(final Map
<String
, Object
> attrs
) {
41 public <T
> T
get(String dest
) {
42 final T value
= super.get(dest
);
47 final var camelCaseString
= Util
.dashSeparatedToCamelCaseString(dest
);
48 return super.get(camelCaseString
);
52 public <E
> List
<E
> getList(final String dest
) {
53 final List
<E
> value
= super.getList(dest
);
58 return super.getList(dest
+ "s");
62 public Boolean
getBoolean(String dest
) {
63 Boolean maybeGotten
= this.get(dest
);
64 if (maybeGotten
== null) {