Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
First pass
  • Loading branch information
rstradling committed Jul 8, 2018
0 parents commit 750c0cd
Show file tree
Hide file tree
Showing 7 changed files with 201 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
@@ -0,0 +1,2 @@
.idea
target
21 changes: 21 additions & 0 deletions build.sbt
@@ -0,0 +1,21 @@
import Dependencies._

lazy val root = (project in file(".")).
settings(
crossScalaVersions := Seq("2.11.11", "2.12.6"),
scalacOptions += "-Ypartial-unification",
inThisBuild(List(
organization := "com.example",
scalaVersion := "2.12.6",
version := "0.1.0-SNAPSHOT"
)),
name := "awsio",
libraryDependencies ++= Seq(
"org.typelevel" %% "cats-core" % "1.1.0",
"org.typelevel" %% "cats-effect" % "1.0.0-RC2",
"software.amazon.awssdk" % "sqs" % "2.0.0-preview-10",
"software.amazon.awssdk" % "s3" % "2.0.0-preview-10",
"software.amazon.awssdk" % "sns" % "2.0.0-preview-10",
scalaTest % Test
)
)
5 changes: 5 additions & 0 deletions project/Dependencies.scala
@@ -0,0 +1,5 @@
import sbt._

object Dependencies {
lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.0.5"
}
1 change: 1 addition & 0 deletions project/build.properties
@@ -0,0 +1 @@
sbt.version=1.1.6
37 changes: 37 additions & 0 deletions src/main/scala/com/strad/awsio/com/strad/awsio/sns/SnsOps.scala
@@ -0,0 +1,37 @@
package com.strad.awsio.com.strad.awsio.sns

import cats.~>
import cats.effect.Async
import java.util.concurrent.CompletableFuture
import software.amazon.awssdk.services.sns.SNSAsyncClient
import software.amazon.awssdk.services.sns.model.CreateTopicRequest
import software.amazon.awssdk.services.sns.model.CreateTopicResponse
import software.amazon.awssdk.services.sns.model.PublishRequest
import software.amazon.awssdk.services.sns.model.PublishResponse
import software.amazon.awssdk.services.sns.model.ListTopicsRequest
import software.amazon.awssdk.services.sns.model.ListTopicsResponse
import software.amazon.awssdk.services.sns.model.SubscribeRequest
import software.amazon.awssdk.services.sns.model.SubscribeResponse

trait SnsTopicOps[F[_]] {
def create(createTopicRequest: CreateTopicRequest): F[CreateTopicResponse]
def publish(publishRequest: PublishRequest): F[PublishResponse]
def list(listTopicsRequest: ListTopicsRequest): F[ListTopicsResponse]
def subscribe(subscribeRequest: SubscribeRequest): F[SubscribeResponse]
}

class SnsTopicOpsImpl[F[_]](client: SNSAsyncClient)(implicit f: Async[F], transform: CompletableFuture ~> F) extends SnsTopicOps[F] {
def create(createTopicRequest: CreateTopicRequest): F[CreateTopicResponse] = {
transform(client.createTopic(createTopicRequest))
}
def publish(publishRequest: PublishRequest): F[PublishResponse] = {
transform(client.publish(publishRequest))
}
def list(listTopicsRequest: ListTopicsRequest): F[ListTopicsResponse] = {
transform(client.listTopics(listTopicsRequest))
}
def subscribe(subscribeRequest: SubscribeRequest): F[SubscribeResponse] = {
transform(client.subscribe(subscribeRequest))
}
}

66 changes: 66 additions & 0 deletions src/main/scala/com/strad/awsio/s3/Bucket.scala
@@ -0,0 +1,66 @@
package com.strad.awsio.s3

import cats.~>
import cats.effect.Async
import java.util.concurrent.CompletableFuture
import software.amazon.awssdk.core.async.AsyncRequestBody
import software.amazon.awssdk.core.async.AsyncResponseTransformer
import software.amazon.awssdk.services.s3.S3AsyncClient
import software.amazon.awssdk.services.s3.model.CreateBucketRequest
import software.amazon.awssdk.services.s3.model.CreateBucketResponse
import software.amazon.awssdk.services.s3.model.DeleteBucketRequest
import software.amazon.awssdk.services.s3.model.DeleteBucketResponse
import software.amazon.awssdk.services.s3.model.ListBucketsRequest
import software.amazon.awssdk.services.s3.model.ListBucketsResponse
import software.amazon.awssdk.services.s3.model.PutObjectRequest
import software.amazon.awssdk.services.s3.model.GetObjectRequest
import software.amazon.awssdk.services.s3.model.DeleteObjectResponse
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest
import software.amazon.awssdk.services.s3.model.PutObjectResponse
import software.amazon.awssdk.services.s3.model.GetObjectResponse
import software.amazon.awssdk.services.s3.model.UploadPartRequest
import software.amazon.awssdk.services.s3.model.UploadPartResponse

trait BucketOps[F[_]] {
def create(createBucketRequest: CreateBucketRequest): F[CreateBucketResponse]
def list(listBucketsjRequest: ListBucketsRequest): F[ListBucketsResponse]
def delete(deleteBucketRequest: DeleteBucketRequest): F[DeleteBucketResponse]
}

trait ObjectOps[F[_]] {
def put(putObjectRequest: PutObjectRequest, body: AsyncRequestBody): F[PutObjectResponse]
def putMultipart(uploadPartRequest: UploadPartRequest, body: AsyncRequestBody): F[UploadPartResponse]
def get(getObjectRequest: GetObjectRequest, asyncResponseTransformer: AsyncResponseTransformer[GetObjectResponse,GetObjectResponse]): F[GetObjectResponse]
def delete(DeleteObjectRequest: DeleteObjectRequest): F[DeleteObjectResponse]
}



class BucketOpsImpl[F[_]](client: S3AsyncClient)(implicit f: Async[F], transform: CompletableFuture ~> F) extends BucketOps [F] {
def create(createBucketRequest: CreateBucketRequest): F[CreateBucketResponse] = {
transform(client.createBucket(createBucketRequest))
}
def list(listBucketsRequest: ListBucketsRequest): F[ListBucketsResponse] = {
transform(client.listBuckets(listBucketsRequest))
}
def delete(deleteBucketRequest: DeleteBucketRequest): F[DeleteBucketResponse] = {
transform(client.deleteBucket(deleteBucketRequest))
}
}

class ObjectOpsImpl[F[_]](client: S3AsyncClient)(implicit f: Async[F], transform: CompletableFuture ~> F) extends ObjectOps [F] {
def put(putObjectRequest: PutObjectRequest, body: AsyncRequestBody): F[PutObjectResponse] = {
transform(client.putObject(putObjectRequest, body))

}
def putMultipart(uploadPartRequest: UploadPartRequest, body: AsyncRequestBody): F[UploadPartResponse] = {
transform(client.uploadPart(uploadPartRequest, body))

}
def get(getObjectRequest: GetObjectRequest, asyncResponseTransformer: AsyncResponseTransformer[GetObjectResponse, GetObjectResponse]): F[GetObjectResponse] = {
transform(client.getObject(getObjectRequest, asyncResponseTransformer))
}
def delete(deleteObjectRequest: DeleteObjectRequest): F[DeleteObjectResponse] = {
transform(client.deleteObject(deleteObjectRequest))
}
}
69 changes: 69 additions & 0 deletions src/main/scala/com/strad/awsio/sqs/sqs.scala
@@ -0,0 +1,69 @@
package com.strad.awsio.sqs

import cats.~>
import cats.effect.Async
import java.util.concurrent.CompletableFuture
import software.amazon.awssdk.services.sqs.SQSAsyncClient
import software.amazon.awssdk.services.sqs.model.CreateQueueRequest
import software.amazon.awssdk.services.sqs.model.CreateQueueResponse
import software.amazon.awssdk.services.sqs.model.ListQueuesRequest
import software.amazon.awssdk.services.sqs.model.ListQueuesResponse
import software.amazon.awssdk.services.sqs.model.GetQueueUrlRequest
import software.amazon.awssdk.services.sqs.model.GetQueueUrlResponse
import software.amazon.awssdk.services.sqs.model.DeleteQueueRequest
import software.amazon.awssdk.services.sqs.model.DeleteQueueResponse
import software.amazon.awssdk.services.sqs.model.SendMessageRequest
import software.amazon.awssdk.services.sqs.model.SendMessageResponse
import software.amazon.awssdk.services.sqs.model.SendMessageBatchRequest
import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest
import software.amazon.awssdk.services.sqs.model.ReceiveMessageResponse
import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest
import software.amazon.awssdk.services.sqs.model.DeleteMessageResponse
import software.amazon.awssdk.services.sqs.model.SendMessageBatchResponse

trait QueueOps[F[_]] {
def create(queueRequest: CreateQueueRequest): F[CreateQueueResponse]
def list(listQueuesRequest: ListQueuesRequest): F[ListQueuesResponse]
def getUrl(getQueueUrlRequest: GetQueueUrlRequest): F[GetQueueUrlResponse]
def delete(deleteQueueRequest: DeleteQueueRequest): F[DeleteQueueResponse]
}

trait MessageOps[F[_]] {
def send(sendMessageRequest: SendMessageRequest): F[SendMessageResponse]
def sendBatch(sendMessageBatchRequest: SendMessageBatchRequest): F[SendMessageBatchResponse]
def receive(receiveMessageRequest: ReceiveMessageRequest): F[ReceiveMessageResponse]
def delete(deleteMessageRequest: DeleteMessageRequest): F[DeleteMessageResponse]
}


class QueueOpsImpl[F[_]](client: SQSAsyncClient)(implicit f: Async[F], transform: CompletableFuture ~> F) extends QueueOps[F] {
def create(queueRequest: CreateQueueRequest): F[CreateQueueResponse] = {
transform(client.createQueue(queueRequest))
}
def list(listQueuesRequest: ListQueuesRequest): F[ListQueuesResponse] = {
transform(client.listQueues(listQueuesRequest))
}
def getUrl(getQueueUrlRequest: GetQueueUrlRequest): F[GetQueueUrlResponse] = {
transform(client.getQueueUrl(getQueueUrlRequest))
}
def delete(deleteQueueRequest: DeleteQueueRequest): F[DeleteQueueResponse] = {
transform(client.deleteQueue(deleteQueueRequest))
}
}


class MessageOpsImpl[F[_]](client: SQSAsyncClient)(implicit f: Async[F], transform: CompletableFuture ~> F) extends MessageOps[F] {
def send(sendMessageRequest: SendMessageRequest): F[SendMessageResponse] = {
transform(client.sendMessage(sendMessageRequest))
}
def sendBatch(sendMessageBatchRequest: SendMessageBatchRequest): F[SendMessageBatchResponse] = {
transform(client.sendMessageBatch(sendMessageBatchRequest))
}
def receive(receiveMessageRequest: ReceiveMessageRequest): F[ReceiveMessageResponse] = {
transform(client.receiveMessage(receiveMessageRequest))
}
def delete(deleteMessageRequest: DeleteMessageRequest): F[DeleteMessageResponse] = {
transform(client.deleteMessage(deleteMessageRequest))
}
}

0 comments on commit 750c0cd

Please sign in to comment.