io.mstream.trader.simulation.handlers.api.PayloadExtractor Maven / Gradle / Ivy
package io.mstream.trader.simulation.handlers.api;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.mstream.trader.commons.utils.exception.ParsingException;
import ratpack.http.TypedData;
import rx.Observable;
import rx.functions.Func1;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
public class PayloadExtractor
implements Func1> {
private final Class type;
private final ObjectMapper objectMapper;
protected PayloadExtractor(ObjectMapper objectMapper) {
type =
(Class) ((ParameterizedType) getClass()
.getGenericSuperclass())
.getActualTypeArguments()[0];
this.objectMapper = objectMapper;
}
@Override
public Observable call(TypedData body) {
try {
T payload =
objectMapper
.readValue(
body.getBytes(),
type
);
return Observable.just(payload);
} catch (IOException e) {
return Observable.error(
ParsingException.get()
);
}
}
}