class AttachmentUploadResult {

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AttachmentUploadResult<?> result = (AttachmentUploadResult<?>) o;
        return Objects.equals(getTarget(), result.getTarget()) &&
                successfulUploads.equals(result.successfulUploads) &&
                failedUploads.equals(result.failedUploads);
    }

    public  AttachmentUploadResult(T target);
    private  AttachmentUploadResult(T target,
                                   Set<AttachmentUploadRequest.Item> successfulUploads,
                                   Map<AttachmentUploadRequest.Item, Throwable> failedUploads);

}