module Kafka.Avro
( module X
, propagateKeySchema
, propagateValueSchema
) where
import Control.Monad.IO.Class
import Data.ByteString.Lazy
import Kafka.Avro.Decode as X
import Kafka.Avro.Encode as X
import Kafka.Avro.SchemaRegistry as X
propagateKeySchema :: MonadIO m => SchemaRegistry -> Subject -> ByteString -> m (Either SchemaRegistryError (Maybe SchemaId))
propagateKeySchema sr subj = propagateSchema sr (keySubject subj)
propagateValueSchema :: MonadIO m => SchemaRegistry -> Subject -> ByteString -> m (Either SchemaRegistryError (Maybe SchemaId))
propagateValueSchema sr subj = propagateSchema sr (valueSubject subj)
propagateSchema :: MonadIO m
=> SchemaRegistry
-> Subject
-> ByteString
-> m (Either SchemaRegistryError (Maybe SchemaId))
propagateSchema sr subj bs = do
case extractSchemaId bs of
Nothing -> return $ Right Nothing
Just (sid, _) -> do
mSchema <- loadSchema sr sid
case mSchema of
Left (SchemaRegistrySchemaNotFound _) -> return $ Right Nothing
Left err -> return $ Left err
Right schema -> fmap Just <$> sendSchema sr subj schema