-
Notifications
You must be signed in to change notification settings - Fork 16
/
HttpPubsubProducer.scala
54 lines (50 loc) · 2.17 KB
/
HttpPubsubProducer.scala
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
46
47
48
49
50
51
52
53
54
/*
* Copyright 2018 Permutive
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.permutive.pubsub.producer.http
import cats.effect.kernel.{Async, Resource}
import com.permutive.pubsub.producer.encoder.MessageEncoder
import com.permutive.pubsub.producer.http.internal.DefaultHttpPublisher
import com.permutive.pubsub.producer.{Model, PubsubProducer}
import org.typelevel.log4cats.Logger
import org.http4s.client.Client
object HttpPubsubProducer {
/** Create an HTTP PubSub producer which does not batch.
*
* @param projectId google cloud project id
* @param topic the topic to produce to
* @param googleServiceAccountPath path to the Google Service account file (json), if not specified then the GCP
* metadata endpoint is used to retrieve the `default` service account access token
*
* See the following for documentation on GCP metadata endpoint and service accounts:
* - https://cloud.google.com/compute/docs/storing-retrieving-metadata
* - https://cloud.google.com/compute/docs/metadata/default-metadata-values
* - https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances
*/
def resource[F[_]: Async: Logger, A: MessageEncoder](
projectId: Model.ProjectId,
topic: Model.Topic,
googleServiceAccountPath: Option[String],
config: PubsubHttpProducerConfig[F],
httpClient: Client[F]
): Resource[F, PubsubProducer[F, A]] =
DefaultHttpPublisher.resource(
projectId = projectId,
topic = topic,
serviceAccountPath = googleServiceAccountPath,
config = config,
httpClient = httpClient
)
}