public static RequestTemplateModel from(final Request request) {
RequestLine requestLine = RequestLine.fromRequest(request);
Map<String, ListOrSingle<String>> adaptedHeaders = Maps.toMap(request.getAllHeaderKeys(), new Function<String, ListOrSingle<String>>() {
@Override
public ListOrSingle<String> apply(String input) {
return ListOrSingle.of(request.header(input).values());
}
});
Map<String, ListOrSingle<String>> adaptedCookies = Maps.transformValues(request.getCookies(), new Function<Cookie, ListOrSingle<String>>() {
@Override
public ListOrSingle<String> apply(Cookie cookie) {
return ListOrSingle.of(cookie.getValues());
}
});
return new RequestTemplateModel(
requestLine,
adaptedHeaders,
adaptedCookies,
request.getBodyAsString()
);
}