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
<>() {};
22 default void handleCommand(
23 Map
<String
, Object
> request
, Manager m
, OutputWriter outputWriter
24 ) throws CommandException
{
25 Namespace commandNamespace
= new JsonRpcNamespace(request
== null ? Map
.of() : request
);
26 handleCommand(commandNamespace
, m
, outputWriter
);
29 default List
<OutputType
> getSupportedOutputTypes() {
30 return List
.of(OutputType
.PLAIN_TEXT
, OutputType
.JSON
);
34 * Namespace implementation, that has plural handling for list arguments and converts camel case keys to dashed strings
36 final class JsonRpcNamespace
extends Namespace
{
38 public JsonRpcNamespace(final Map
<String
, Object
> attrs
) {
43 public <T
> T
get(String dest
) {
44 final T value
= super.get(dest
);
49 final var camelCaseString
= Util
.dashSeparatedToCamelCaseString(dest
);
50 return super.get(camelCaseString
);
54 public <E
> List
<E
> getList(final String dest
) {
56 final List
<E
> value
= super.getList(dest
);
60 } catch (ClassCastException e
) {
61 return List
.of(this.<E
>get(dest
));
64 return super.getList(dest
+ "s");