akka.stream.alpakka.kinesis.scaladsl.KinesisSource.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of akka-stream-alpakka-kinesis_2.12 Show documentation
Show all versions of akka-stream-alpakka-kinesis_2.12 Show documentation
Alpakka is a Reactive Enterprise Integration library for Java and Scala, based on Reactive Streams and Akka.
/*
* Copyright (C) 2016-2018 Lightbend Inc.
*/
package akka.stream.alpakka.kinesis.scaladsl
import akka.NotUsed
import akka.stream.alpakka.kinesis.KinesisErrors.NoShardsError
import akka.stream.alpakka.kinesis.{KinesisSourceStage, ShardSettings}
import akka.stream.scaladsl.{Merge, Source}
import com.amazonaws.services.kinesis.AmazonKinesisAsync
import com.amazonaws.services.kinesis.model.Record
object KinesisSource {
def basic(shardSettings: ShardSettings, amazonKinesisAsync: AmazonKinesisAsync): Source[Record, NotUsed] =
Source.fromGraph(new KinesisSourceStage(shardSettings, amazonKinesisAsync))
def basicMerge(shardSettings: List[ShardSettings],
amazonKinesisAsync: AmazonKinesisAsync): Source[Record, NotUsed] = {
val create: ShardSettings => Source[Record, NotUsed] = basic(_, amazonKinesisAsync)
shardSettings match {
case Nil => Source.failed(NoShardsError)
case first :: Nil => create(first)
case first :: second :: Nil => Source.combine(create(first), create(second))(Merge(_))
case first :: second :: rest =>
Source.combine(create(first), create(second), rest.map(create(_)): _*)(Merge(_))
}
}
}