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);
}
}
}