classDiagram
    %%
    %% nextflow.cloud.aws.nio
    %%
    FileSystemProvider <|-- S3FileSystemProvider

    S3FileSystemProvider --> S3FileSystem : newFileSystem

    class S3FileSystem {
        client : S3Client
        endpoint : String
    }
    S3FileSystem --* S3Client

    class S3Client {
        client : AmazonS3
        cannedAcl : CannedAccessControlList
        kmsKeyId : String
        storageEncryption : SSEAlgorithm
        transferManager : TransferManager
        transferPool : ExecutorService
        uploadChunkSize : Long
        uploadMaxThreads : Integer
    }

    Path <|-- S3Path

    class S3Path {
        bucket : String
        parts : List~String~
        fileSystem : S3FileSystem
    }
    S3Path --* S3FileSystem
