3
3
4
4
module Database.MongoDB.Internal.Network (PortID (.. ), N. HostName , connectTo ) where
5
5
6
- import Control.Exception (bracketOnError )
7
- import Network.BSD as BSD
8
- import System.IO (Handle , IOMode (ReadWriteMode ))
9
6
10
7
#if !MIN_VERSION_network(2, 8, 0)
8
+
11
9
import qualified Network as N
10
+ import System.IO (Handle )
11
+
12
12
#else
13
+
14
+ import Control.Exception (bracketOnError )
15
+ import Network.BSD as BSD
13
16
import qualified Network.Socket as N
17
+ import System.IO (Handle , IOMode (ReadWriteMode ))
18
+
14
19
#endif
15
20
21
+
22
+ -- | Wraps network's 'PortNumber'
23
+ -- Used to easy compatibility between older and newer network versions.
16
24
newtype PortID = PortNumber N. PortNumber deriving (Show , Eq , Ord )
17
25
18
- -- Taken from network 2.8's connectTo
26
+
27
+ #if !MIN_VERSION_network(2, 8, 0)
28
+
29
+ -- Unwrap our newtype and use network's PortID and connectTo
30
+ connectTo :: N. HostName -- Hostname
31
+ -> PortID -- Port Identifier
32
+ -> IO Handle -- Connected Socket
33
+ connectTo hostname (PortNumber port) = N. connectTo hostname (N. PortNumber port)
34
+
35
+ #else
36
+
37
+ -- Copied implementation from network 2.8's 'connectTo', but using our 'PortID' newtype.
19
38
-- https://github.com/haskell/network/blob/e73f0b96c9da924fe83f3c73488f7e69f712755f/Network.hs#L120-L129
20
39
connectTo :: N. HostName -- Hostname
21
40
-> PortID -- Port Identifier
@@ -30,3 +49,4 @@ connectTo hostname (PortNumber port) = do
30
49
N. connect sock (N. SockAddrInet port (hostAddress he))
31
50
N. socketToHandle sock ReadWriteMode
32
51
)
52
+ #endif
0 commit comments