import com.amadeus.flamme.runtime.annotations.Flamme;
import com.amadeus.flamme.runtime.annotations.FlammeImpl;
import com.google.protobuf.Message;
import com.google.protobuf.StringValue;
import jakarta.inject.Inject;
import java.util.Map;
@Flamme(
serviceName = "greeter",
multiPayloadKeys = {
@Flamme.MultiPayloadKey(id = GreeterService.NAME_KEY, type = StringValue.class),
@Flamme.MultiPayloadKey(id = GreeterService.GREETING_KEY, type = StringValue.class)
}
)
public interface GreeterService {
String NAME_KEY = "name";
String GREETING_KEY = "greeting";
Map<String, Message> sayHello(Map<String, Message> payload);
}
@FlammeImpl
class GreeterServiceImpl implements GreeterService {
@Override
public Map<String, Message> sayHello(Map<String, Message> payload) {
StringValue name = (StringValue) payload.get(NAME_KEY);
return Map.of(
GREETING_KEY,
StringValue.of("Hello, " + name.getValue() + "!")
);
}
}
class GreeterResource {
@Inject
GreeterService greeterService;
String greet() {
Map<String, Message> response = greeterService.sayHello(
Map.of(GreeterService.NAME_KEY, StringValue.of("World"))
);
return ((StringValue) response.get(GreeterService.GREETING_KEY)).getValue();
}
}