diff options
author | Aleksandr <ognelisar@gmail.com> | 2018-04-10 10:27:12 +0700 |
---|---|---|
committer | Aleksandr <ognelisar@gmail.com> | 2018-04-10 10:27:12 +0700 |
commit | cd4d77b563c7da5600111f7220dd69c732dc495c (patch) | |
tree | c89d6032616f2be3aa278f24492f8908afa8a43c /src/main/scala/xyz/driver/core/storage/BlobStorage.scala | |
parent | fc7355c69eeab8334ea066a434476d227e9dc399 (diff) | |
parent | 57ee8fa785c3815e45e473e5625d6e3cb1cd9402 (diff) | |
download | driver-core-cd4d77b563c7da5600111f7220dd69c732dc495c.tar.gz driver-core-cd4d77b563c7da5600111f7220dd69c732dc495c.tar.bz2 driver-core-cd4d77b563c7da5600111f7220dd69c732dc495c.zip |
Merge branch 'master' into FIX-TIME-COMPARISSON
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]] +} |