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
.OutputWriter
;
9 import org
.asamk
.signal
.commands
.exceptions
.CommandException
;
10 import org
.asamk
.signal
.manager
.Manager
;
11 import org
.asamk
.signal
.util
.Util
;
13 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(
24 Map
<String
, Object
> request
, Manager m
, OutputWriter outputWriter
25 ) throws CommandException
{
26 Namespace commandNamespace
= new JsonRpcNamespace(request
== null ? Map
.of() : request
);
27 handleCommand(commandNamespace
, m
, outputWriter
);
30 default List
<OutputType
> getSupportedOutputTypes() {
31 return List
.of(OutputType
.PLAIN_TEXT
, OutputType
.JSON
);
35 * Namepace implementation, that defaults booleans to false and converts camel case keys to dashed strings
37 final class JsonRpcNamespace
extends Namespace
{
39 public JsonRpcNamespace(final Map
<String
, Object
> attrs
) {
44 public <T
> T
get(String dest
) {
45 final T value
= super.get(dest
);
50 final var camelCaseString
= Util
.dashSeparatedToCamelCaseString(dest
);
51 return super.get(camelCaseString
);
55 public <E
> List
<E
> getList(final String dest
) {
57 final List
<E
> value
= super.getList(dest
);
61 } catch (ClassCastException e
) {
62 return List
.of(this.<E
>get(dest
));
65 return super.getList(dest
+ "s");
69 public Boolean
getBoolean(String dest
) {
70 Boolean maybeGotten
= this.get(dest
);
71 if (maybeGotten
== null) {