in java/showcase/src/main/java/org/apache/flink/statefun/playground/java/showcase/part1/types/TypeSystemShowcaseFn.java [83:109]
public CompletableFuture<Void> apply(Context context, Message message) {
// All values, including messages and storage values, are handled via StateFun's type system.
// StateFun ships built-in primitive types that handles de-/serialization of messages across
// functions:
if (message.isBoolean()) {
final boolean val = message.asBoolean();
} else if (message.isInt()) {
final int val = message.asInt();
} else if (message.isFloat()) {
final float val = message.asFloat();
} else if (message.isLong()) {
final long val = message.asLong();
} else if (message.isDouble()) {
final double val = message.asDouble();
} else if (message.isUtf8String()) {
final String val = message.asUtf8String();
} else if (message.is(USER_LOGIN_JSON_TYPE)) {
// You can also define your own types using the type system, such as a JSON message, ...
final UserLogin val = message.as(USER_LOGIN_JSON_TYPE);
} else if (message.is(USER_PROFILE_PROTOBUF_TYPE)) {
// ... or a Protobuf message!
final UserProfile val = message.as(USER_PROFILE_PROTOBUF_TYPE);
} else {
throw new IllegalArgumentException("Unrecognized message type!");
}
return context.done();
}