@Override
 public void readFrom(StreamInput in) throws IOException {
   super.readFrom(in);
   stage = SnapshotIndexShardStage.fromValue(in.readByte());
   stats = SnapshotStats.readSnapshotStats(in);
   nodeId = in.readOptionalString();
   failure = in.readOptionalString();
 }
 @Override
 public void writeTo(StreamOutput out) throws IOException {
   super.writeTo(out);
   out.writeByte(stage.value());
   stats.writeTo(out);
   out.writeOptionalString(nodeId);
   out.writeOptionalString(failure);
 }
 @Override
 public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
   builder.startObject(Integer.toString(getShardId()));
   builder.field(Fields.STAGE, getStage());
   stats.toXContent(builder, params);
   if (getNodeId() != null) {
     builder.field(Fields.NODE, getNodeId());
   }
   if (getFailure() != null) {
     builder.field(Fields.REASON, getFailure());
   }
   builder.endObject();
   return builder;
 }