google / google/mobly-snippet-lib

RpcDefault only has default converters for boxed types, not primitives (e.g. Boolean not boolean)

Open
#138 0 comments 0 reactions 1 assignee Claimed by @mhaoli View on GitHub
improvement
Dominant language
No language data
Stars
44
Forks
25
PR merge metrics
No merged PRs in 30d

Description

I discovered on my first usage of @RpcDefault that mobly-snippet-lib only has default type converters defined for the boxed types like Boolean, but not boolean. This ends up particularly confusing when writing snippets in Kotlin because Kotlin's "Boolean" is a JVM "boolean" primitive.

For example, the following naive Kotlin conversion of ex7_default_and_optional_rpc:

```
@Rpc(description = "Make a toast on screen.")
fun makeToast(
message: String, @RpcDefault("true") bool: Boolean, @RpcOptional number: Int): String {
```

will result in the following unless a value is provided for "bool":

```
java.lang.IllegalArgumentException: No predefined converter found for boolean
at com.google.android.mobly.snippet.rpc.MethodDescriptor.converterFor(MethodDescriptor.java:309)
at com.google.android.mobly.snippet.rpc.MethodDescriptor.getDefaultValue(MethodDescriptor.java:280)
at com.google.android.mobly.snippet.rpc.MethodDescriptor.invoke(MethodDescriptor.java:91)
at com.google.android.mobly.snippet.util.RpcUtil.invokeRpc(RpcUtil.java:131)
at com.google.android.mobly.snippet.util.RpcUtil.invokeRpc(RpcUtil.java:103)
at com.google.android.mobly.snippet.rpc.JsonRpcServer.handleRPCConnection(JsonRpcServer.java:83)
at com.google.android.mobly.snippet.rpc.SimpleServer$ConnectionThread.run(SimpleServer.java:109)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.