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 -- | Registers schema that was used for a given payload against the specified subject as a key shema. -- It is possible that a given payload doesn't have schema registered against it, in this case no prapagation happens. propagateKeySchema :: MonadIO m => SchemaRegistry -> Subject -> ByteString -> m (Either SchemaRegistryError (Maybe SchemaId)) propagateKeySchema sr subj = propagateSchema sr (keySubject subj) -- | Registers schema that was used for a given payload against the specified subject as a value schema. -- It is possible that a given payload doesn't have schema registered against it, in this case no prapagation happens. 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