blob: b12230e389e93f92b08619acc2d4a4b2209082c4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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]]
}
|