package com.github.obourgain.elasticsearch.http.handler.document.delete; import java.io.IOException; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParser; import com.github.obourgain.elasticsearch.http.buffer.ByteBufBytesReference; import io.netty.buffer.ByteBuf; import lombok.Builder; import lombok.Getter; import rx.Observable; @Builder @Getter public class DeleteResponse { private String index; private String type; private String id; private long version; private boolean found; protected static Observable<DeleteResponse> parse(ByteBuf content) { return Observable.just(doParse(new ByteBufBytesReference(content))); } protected static DeleteResponse doParse(BytesReference bytesReference) { try (XContentParser parser = XContentHelper.createParser(bytesReference)) { DeleteResponse.DeleteResponseBuilder builder = DeleteResponse.builder(); XContentParser.Token token; String currentFieldName = null; while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) { if (token == XContentParser.Token.FIELD_NAME) { currentFieldName = parser.currentName(); } else if (token.isValue()) { assert currentFieldName != null; switch (currentFieldName) { case "_index": builder.index(parser.text()); break; case "_type": builder.type(parser.text()); break; case "_id": builder.id(parser.text()); break; case "_version": builder.version(parser.longValue()); case "found": builder.found(parser.booleanValue()); break; default: throw new IllegalStateException("unknown field " + currentFieldName); } } } return builder.build(); } catch (IOException e) { throw new RuntimeException(e); } } }