irc-conduit 0.2.2.5 → 0.3.0.0
raw patch · 3 files changed
+28/−24 lines, 3 filesdep ~conduitPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: conduit
API changes (from Hackage documentation)
- Network.IRC.Conduit: floodProtector :: MonadIO m => NominalDiffTime -> IO (Conduit a m a)
+ Network.IRC.Conduit: floodProtector :: MonadIO m => NominalDiffTime -> IO (ConduitM a a m ())
- Network.IRC.Conduit: ircClient :: Int -> ByteString -> IO () -> Consumer (Either ByteString IrcEvent) IO () -> Producer IO IrcMessage -> IO ()
+ Network.IRC.Conduit: ircClient :: Int -> ByteString -> IO () -> ConduitM (Either ByteString IrcEvent) Void IO () -> ConduitM () IrcMessage IO () -> IO ()
- Network.IRC.Conduit: ircDecoder :: Monad m => Conduit ByteString m (Either ByteString IrcEvent)
+ Network.IRC.Conduit: ircDecoder :: Monad m => ConduitM ByteString (Either ByteString IrcEvent) m ()
- Network.IRC.Conduit: ircEncoder :: Monad m => Conduit IrcMessage m ByteString
+ Network.IRC.Conduit: ircEncoder :: Monad m => ConduitM IrcMessage ByteString m ()
- Network.IRC.Conduit: ircLossyDecoder :: Monad m => Conduit ByteString m IrcEvent
+ Network.IRC.Conduit: ircLossyDecoder :: Monad m => ConduitM ByteString IrcEvent m ()
- Network.IRC.Conduit: ircTLSClient :: Int -> ByteString -> IO () -> Consumer (Either ByteString IrcEvent) IO () -> Producer IO IrcMessage -> IO ()
+ Network.IRC.Conduit: ircTLSClient :: Int -> ByteString -> IO () -> ConduitM (Either ByteString IrcEvent) Void IO () -> ConduitM () IrcMessage IO () -> IO ()
- Network.IRC.Conduit: ircTLSClient' :: TLSClientConfig -> IO () -> Consumer (Either ByteString IrcEvent) IO () -> Producer IO IrcMessage -> IO ()
+ Network.IRC.Conduit: ircTLSClient' :: TLSClientConfig -> IO () -> ConduitM (Either ByteString IrcEvent) Void IO () -> ConduitM () IrcMessage IO () -> IO ()
- Network.IRC.Conduit: ircWithConn :: ((AppData -> IO ()) -> IO ()) -> IO () -> Consumer (Either ByteString IrcEvent) IO () -> Producer IO IrcMessage -> IO ()
+ Network.IRC.Conduit: ircWithConn :: ((AppData -> IO ()) -> IO ()) -> IO () -> ConduitM (Either ByteString IrcEvent) Void IO () -> ConduitM () IrcMessage IO () -> IO ()
- Network.IRC.Conduit.Internal: chunked :: Monad m => Conduit ByteString m ByteString
+ Network.IRC.Conduit.Internal: chunked :: Monad m => ConduitM ByteString ByteString m ()
Files
- Network/IRC/Conduit.hs +23/−19
- Network/IRC/Conduit/Internal.hs +2/−2
- irc-conduit.cabal +3/−3
Network/IRC/Conduit.hs view
@@ -64,38 +64,39 @@ import Control.Monad (when) import Control.Monad.IO.Class (MonadIO, liftIO) import Data.ByteString (ByteString)-import Data.Conduit (Conduit, Consumer, Producer, (=$), ($$), (=$=), awaitForever, yield, runConduit)+import Data.Conduit (ConduitM, (.|), awaitForever, yield, runConduit) import Data.Conduit.Network (AppData, clientSettings, runTCPClient, appSource, appSink) import Data.Conduit.Network.TLS (TLSClientConfig(..), tlsClientConfig, runTLSClient) import Data.Monoid ((<>)) import Data.Text (unpack) import Data.Text.Encoding (decodeUtf8) import Data.Time.Clock (NominalDiffTime, getCurrentTime, addUTCTime, diffUTCTime)+import Data.Void (Void) import Data.X509.Validation (FailedReason(..)) import Network.Connection (TLSSettings(..)) import Network.IRC.Conduit.Internal import Network.IRC.Conduit.Lens import Network.TLS (ClientParams(..), ClientHooks(..), Supported(..), Version(..), defaultParamsClient)-import Network.TLS.Extra (ciphersuite_all)+import Network.TLS.Extra (ciphersuite_strong) -- *Conduits -- |A conduit which takes as input bytestrings representing encoded -- IRC messages, and decodes them to events. If decoding fails, the -- original bytestring is just passed through.-ircDecoder :: Monad m => Conduit ByteString m (Either ByteString IrcEvent)-ircDecoder = chunked =$= awaitForever (yield . fromByteString)+ircDecoder :: Monad m => ConduitM ByteString (Either ByteString IrcEvent) m ()+ircDecoder = chunked .| awaitForever (yield . fromByteString) -- |Like 'ircDecoder', but discards messages which could not be -- decoded.-ircLossyDecoder :: Monad m => Conduit ByteString m IrcEvent-ircLossyDecoder = chunked =$= awaitForever lossy+ircLossyDecoder :: Monad m => ConduitM ByteString IrcEvent m ()+ircLossyDecoder = chunked .| awaitForever lossy where lossy bs = either (\_ -> return ()) yield $ fromByteString bs -- |A conduit which takes as input irc messages, and produces as -- output the encoded bytestring representation.-ircEncoder :: Monad m => Conduit IrcMessage m ByteString+ircEncoder :: Monad m => ConduitM IrcMessage ByteString m () ircEncoder = awaitForever (yield . (<>"\r\n") . toByteString) -- |A conduit which rate limits output sent downstream. Awaiting on@@ -104,7 +105,7 @@ floodProtector :: MonadIO m => NominalDiffTime -- ^The minimum time between sending adjacent messages.- -> IO (Conduit a m a)+ -> IO (ConduitM a a m ()) floodProtector delay = do now <- getCurrentTime mvar <- newMVar now@@ -141,9 +142,9 @@ -> IO () -- ^Any initialisation work (started concurrently with the -- producer and consumer)- -> Consumer (Either ByteString IrcEvent) IO ()+ -> ConduitM (Either ByteString IrcEvent) Void IO () -- ^The consumer of irc events- -> Producer IO IrcMessage+ -> ConduitM () IrcMessage IO () -- ^The producer of irc messages -> IO () ircClient port host = ircWithConn $ runTCPClient $ clientSettings port host@@ -156,8 +157,8 @@ ircWithConn :: ((AppData -> IO ()) -> IO ()) -- ^The initialised connection. -> IO ()- -> Consumer (Either ByteString IrcEvent) IO ()- -> Producer IO IrcMessage+ -> ConduitM (Either ByteString IrcEvent) Void IO ()+ -> ConduitM () IrcMessage IO () -> IO () ircWithConn runner start cons prod = runner $ \appdata -> runConcurrently $ Concurrently start@@ -166,10 +167,11 @@ where runSource appdata = do- runConduit $ appSource appdata =$= ircDecoder =$ cons+ runConduit $ appSource appdata .| ircDecoder .| cons ioError $ userError "Upstream source closed." - runSink appdata = prod $$ ircEncoder =$ appSink appdata+ runSink appdata =+ runConduit $ prod .| ircEncoder .| appSink appdata -- **TLS @@ -178,16 +180,18 @@ ircTLSClient :: Int -> ByteString -> IO ()- -> Consumer (Either ByteString IrcEvent) IO ()- -> Producer IO IrcMessage -> IO ()+ -> ConduitM (Either ByteString IrcEvent) Void IO ()+ -> ConduitM () IrcMessage IO ()+ -> IO () ircTLSClient port host = ircTLSClient' (defaultTLSConfig port host) -- |Like 'ircTLSClient', but takes the configuration to use, which -- includes the host and port. ircTLSClient' :: TLSClientConfig -> IO ()- -> Consumer (Either ByteString IrcEvent) IO ()- -> Producer IO IrcMessage -> IO ()+ -> ConduitM (Either ByteString IrcEvent) Void IO ()+ -> ConduitM () IrcMessage IO ()+ -> IO () ircTLSClient' cfg = ircWithConn (runTLSClient cfg) -- |The default TLS settings for 'ircTLSClient'.@@ -202,7 +206,7 @@ { onServerCertificate = validate } , clientSupported = (clientSupported cpara) { supportedVersions = [TLS12, TLS11, TLS10]- , supportedCiphers = ciphersuite_all+ , supportedCiphers = ciphersuite_strong } } }
Network/IRC/Conduit/Internal.hs view
@@ -20,7 +20,7 @@ import Control.Arrow ((&&&)) import Data.ByteString (ByteString, isSuffixOf, singleton, unpack) import Data.Char (ord)-import Data.Conduit (Conduit, await, yield)+import Data.Conduit (ConduitM, await, yield) import Data.Maybe (listToMaybe, isJust) import Data.Monoid ((<>)) import Data.Profunctor (Choice)@@ -50,7 +50,7 @@ -- *Conduits -- |Split up incoming bytestrings into new lines.-chunked :: Monad m => Conduit ByteString m ByteString+chunked :: Monad m => ConduitM ByteString ByteString m () chunked = chunked' "" where chunked' !leftover = do
irc-conduit.cabal view
@@ -10,7 +10,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.2.2.5+version: 0.3.0.0 -- A short (one-line) description of the package. synopsis: Streaming IRC message library using conduits.@@ -82,7 +82,7 @@ build-depends: base >=4.8 && <5 , async >=2.0 && <2.2 , bytestring >=0.10 && <0.11- , conduit >=1.2 && <1.4+ , conduit >=1.2.8 && <1.4 , conduit-extra >=1.1 && <1.4 , connection >=0.2 && <0.3 , irc >=0.6 && <0.7@@ -108,4 +108,4 @@ source-repository this type: git location: https://github.com/barrucadu/irc-conduit.git- tag: 0.2.2.5+ tag: 0.3.0.0