functional-google-cloud
Version:
Google Cloud Utilities functions in Functional Programming Style
22 lines • 1.42 kB
JavaScript
import * as E from 'fp-ts/lib/Either';
import * as R from 'fp-ts/lib/Reader';
import { fromTask as getTaskEitherFromTask } from 'functional-types/lib/fp-ts/TaskEither';
import { is, pipe, prop } from 'ramda';
// isPayload :: a -> bool
export const isPayload = (a) => is(Object)(a);
// getBufferFromPayload :: Object -> Buffer
export const getBufferFromPayload = pipe(JSON.stringify, Buffer.from);
// publishBufferToTopicTask :: Buffer -> ReaderTask Topic String
export const publishBufferToTopicTask = (buffer) => (topic) => () => topic.publish(buffer);
// publishBufferToTopic :: Buffer -> ReaderTaskEither Topic String Error
export const publishBufferToTopic = pipe(publishBufferToTopicTask, R.map(getTaskEitherFromTask));
// publishToTopic :: Payload -> ReaderTaskEither Topic String Error
export const publishToTopic = pipe(getBufferFromPayload, publishBufferToTopic);
// getTopicFromPubSub :: string -> Reader PubSub Topic
export const getTopicFromPubSub = (topic) => (pubSub) => pubSub.topic(topic);
// getPayloadFromMessage :: Message -> Either A Error
export const getPayloadFromMessage = pipe(prop('data'), (buffer) => () => {
const base64 = Buffer.from(buffer, 'base64');
return JSON.parse(base64.toString());
}, (a) => E.tryCatch(a, E.toError), E.chain(E.fromPredicate(isPayload, () => new Error('Message data is not a Payload instance.'))));
//# sourceMappingURL=PubSub.js.map