class S3BinaryStore extends AbstractBinaryStore {

    @Override
    public Iterable<BinaryKey> getAllBinaryKeys() throws BinaryStoreException {
        try {
            // get a single (non-inlined) Supplier, but we only call for it, and thence its iterator, when #iterator() is called
            final Supplier<Stream<S3ObjectSummary>> streamSupplier = supplyObjects();
            return () -> streamSupplier.get().map(S3ObjectSummary::getKey).map(BinaryKey::new).iterator();
        } catch (AmazonClientException e) {
            throw new BinaryStoreException(e);
        }
    }

    public  S3BinaryStore(String accessKey, String secretKey, String bucketName);
    public  S3BinaryStore(String accessKey, String secretKey, String bucketName, String endPoint);
    public  S3BinaryStore( String accessKey,
                          String secretKey,
                          String bucketName,
                          String endPoint,
                          Boolean deleteUnusedNatively );
    protected  S3BinaryStore(String bucketName, AmazonS3 s3Client, boolean deleteUnusedNatively);

}