diff options
author | Aleksandr <ognelisar@gmail.com> | 2018-04-10 11:12:33 +0700 |
---|---|---|
committer | Aleksandr <ognelisar@gmail.com> | 2018-04-10 11:12:33 +0700 |
commit | d396c3b6b510c3ed77c17c64df3e58af4146b9a4 (patch) | |
tree | 3533ce548006a836e947e77aa9890d2da666c2fa /src/main/scala/xyz/driver/core/storage/BlobStorage.scala | |
parent | 9a73fb5628f494bcae73496012f8c3baf13a26f1 (diff) | |
parent | 1f49149ba768ac86263d11cb18e7a365b0bb0210 (diff) | |
download | driver-core-d396c3b6b510c3ed77c17c64df3e58af4146b9a4.tar.gz driver-core-d396c3b6b510c3ed77c17c64df3e58af4146b9a4.tar.bz2 driver-core-d396c3b6b510c3ed77c17c64df3e58af4146b9a4.zip |
Merge branch 'master' into TM-1431
Diffstat (limited to 'src/main/scala/xyz/driver/core/storage/BlobStorage.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/storage/BlobStorage.scala | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/storage/BlobStorage.scala b/src/main/scala/xyz/driver/core/storage/BlobStorage.scala new file mode 100644 index 0000000..b12230e --- /dev/null +++ b/src/main/scala/xyz/driver/core/storage/BlobStorage.scala @@ -0,0 +1,45 @@ +package xyz.driver.core.storage + +import java.net.URL +import java.nio.file.Path + +import akka.stream.scaladsl.{Sink, Source} +import akka.util.ByteString +import akka.{Done, NotUsed} + +import scala.concurrent.Future +import scala.concurrent.duration.Duration + +/** Binary key-value store, typically implemented by cloud storage. */ +trait BlobStorage { + + /** Upload data by value. */ + def uploadContent(name: String, content: Array[Byte]): Future[String] + + /** Upload data from an existing file. */ + def uploadFile(name: String, content: Path): Future[String] + + def exists(name: String): Future[Boolean] + + /** List available keys. The prefix determines which keys should be listed + * and depends on the implementation (for instance, a file system backed + * blob store will treat a prefix as a directory path). */ + def list(prefix: String): Future[Set[String]] + + /** Get all the content of a given object. */ + def content(name: String): Future[Option[Array[Byte]]] + + /** Stream data asynchronously and with backpressure. */ + def download(name: String): Future[Option[Source[ByteString, NotUsed]]] + + /** Get a sink to upload data. */ + def upload(name: String): Future[Sink[ByteString, Future[Done]]] + + /** Delete a stored value. */ + def delete(name: String): Future[String] + +} + +trait SignedBlobStorage extends BlobStorage { + def signedDownloadUrl(name: String, duration: Duration): Future[Option[URL]] +} |