{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralisedNewtypeDeriving #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
module Cardano.Node.Configuration.NodeAddress
(
NodeAddress'(..)
, NodeIPAddress
, nodeAddressToSockAddr
, NodeIPv4Address
, NodeIPv6Address
, NodeDnsAddress
, nodeIPv4ToIPAddress
, nodeIPv6ToIPAddress
, nodeDnsAddressToDomainAddress
, NodeHostIPAddress (..)
, nodeHostIPAddressToSockAddr
, NodeHostIPv4Address (..)
, NodeHostIPv6Address (..)
, nodeHostIPv4AddressToIPAddress
, nodeHostIPv6AddressToIPAddress
, NodeHostDnsAddress (..)
, nodeHostDnsAddressToDomain
, PortNumber
, SocketPath(..)
) where
import Cardano.Api
import Data.Aeson (FromJSON (..), ToJSON (..), Value (..), object, withObject, (.:), (.=))
import Data.IP (IP (..), IPv4, IPv6)
import qualified Data.IP as IP
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Network.DNS as DNS (Domain)
import Network.Socket (PortNumber, SockAddr (..))
import Text.Read (readMaybe)
import Ouroboros.Network.PeerSelection.RootPeersDNS (DomainAccessPoint (..))
data NodeAddress' addr = NodeAddress
{ forall addr. NodeAddress' addr -> addr
naHostAddress :: !addr
, forall addr. NodeAddress' addr -> PortNumber
naPort :: !PortNumber
} deriving (NodeAddress' addr -> NodeAddress' addr -> Bool
forall addr.
Eq addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NodeAddress' addr -> NodeAddress' addr -> Bool
$c/= :: forall addr.
Eq addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
== :: NodeAddress' addr -> NodeAddress' addr -> Bool
$c== :: forall addr.
Eq addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
Eq, NodeAddress' addr -> NodeAddress' addr -> Bool
NodeAddress' addr -> NodeAddress' addr -> Ordering
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall {addr}. Ord addr => Eq (NodeAddress' addr)
forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Ordering
forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> NodeAddress' addr
min :: NodeAddress' addr -> NodeAddress' addr -> NodeAddress' addr
$cmin :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> NodeAddress' addr
max :: NodeAddress' addr -> NodeAddress' addr -> NodeAddress' addr
$cmax :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> NodeAddress' addr
>= :: NodeAddress' addr -> NodeAddress' addr -> Bool
$c>= :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
> :: NodeAddress' addr -> NodeAddress' addr -> Bool
$c> :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
<= :: NodeAddress' addr -> NodeAddress' addr -> Bool
$c<= :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
< :: NodeAddress' addr -> NodeAddress' addr -> Bool
$c< :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Bool
compare :: NodeAddress' addr -> NodeAddress' addr -> Ordering
$ccompare :: forall addr.
Ord addr =>
NodeAddress' addr -> NodeAddress' addr -> Ordering
Ord, Int -> NodeAddress' addr -> ShowS
forall addr. Show addr => Int -> NodeAddress' addr -> ShowS
forall addr. Show addr => [NodeAddress' addr] -> ShowS
forall addr. Show addr => NodeAddress' addr -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NodeAddress' addr] -> ShowS
$cshowList :: forall addr. Show addr => [NodeAddress' addr] -> ShowS
show :: NodeAddress' addr -> String
$cshow :: forall addr. Show addr => NodeAddress' addr -> String
showsPrec :: Int -> NodeAddress' addr -> ShowS
$cshowsPrec :: forall addr. Show addr => Int -> NodeAddress' addr -> ShowS
Show, forall a b. a -> NodeAddress' b -> NodeAddress' a
forall a b. (a -> b) -> NodeAddress' a -> NodeAddress' b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> NodeAddress' b -> NodeAddress' a
$c<$ :: forall a b. a -> NodeAddress' b -> NodeAddress' a
fmap :: forall a b. (a -> b) -> NodeAddress' a -> NodeAddress' b
$cfmap :: forall a b. (a -> b) -> NodeAddress' a -> NodeAddress' b
Functor)
type NodeIPAddress = NodeAddress' NodeHostIPAddress
type NodeIPv4Address = NodeAddress' NodeHostIPv4Address
type NodeIPv6Address = NodeAddress' NodeHostIPv6Address
type NodeDnsAddress = NodeAddress' NodeHostDnsAddress
instance FromJSON addr => FromJSON (NodeAddress' addr) where
parseJSON :: Value -> Parser (NodeAddress' addr)
parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a
withObject String
"NodeAddress" forall a b. (a -> b) -> a -> b
$ \Object
v -> do
forall addr. addr -> PortNumber -> NodeAddress' addr
NodeAddress
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"addr"
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((forall a b. (Integral a, Num b) => a -> b
fromIntegral :: Int -> PortNumber) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
v forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"port")
instance ToJSON addr => ToJSON (NodeAddress' addr) where
toJSON :: NodeAddress' addr -> Value
toJSON NodeAddress' addr
na =
[Pair] -> Value
object
[ Key
"addr" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= forall a. ToJSON a => a -> Value
toJSON (forall addr. NodeAddress' addr -> addr
naHostAddress NodeAddress' addr
na)
, Key
"port" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
.= (forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall addr. NodeAddress' addr -> PortNumber
naPort NodeAddress' addr
na) :: Int)
]
nodeIPv4ToIPAddress :: NodeIPv4Address -> NodeIPAddress
nodeIPv4ToIPAddress :: NodeIPv4Address -> NodeIPAddress
nodeIPv4ToIPAddress = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NodeHostIPv4Address -> NodeHostIPAddress
nodeHostIPv4AddressToIPAddress
nodeIPv6ToIPAddress :: NodeIPv6Address -> NodeIPAddress
nodeIPv6ToIPAddress :: NodeIPv6Address -> NodeIPAddress
nodeIPv6ToIPAddress = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NodeHostIPv6Address -> NodeHostIPAddress
nodeHostIPv6AddressToIPAddress
nodeDnsAddressToDomainAddress :: NodeDnsAddress -> DomainAccessPoint
nodeDnsAddressToDomainAddress :: NodeDnsAddress -> DomainAccessPoint
nodeDnsAddressToDomainAddress NodeAddress { naHostAddress :: forall addr. NodeAddress' addr -> addr
naHostAddress = NodeHostDnsAddress Text
dns, PortNumber
naPort :: PortNumber
naPort :: forall addr. NodeAddress' addr -> PortNumber
naPort }
= Domain -> PortNumber -> DomainAccessPoint
DomainAccessPoint (Text -> Domain
Text.encodeUtf8 Text
dns) PortNumber
naPort
nodeAddressToSockAddr :: NodeIPAddress -> SockAddr
nodeAddressToSockAddr :: NodeIPAddress -> SockAddr
nodeAddressToSockAddr (NodeAddress NodeHostIPAddress
addr PortNumber
port) =
case NodeHostIPAddress -> IP
unNodeHostIPAddress NodeHostIPAddress
addr of
IP.IPv4 IPv4
ipv4 -> PortNumber -> FlowInfo -> SockAddr
SockAddrInet PortNumber
port (IPv4 -> FlowInfo
IP.toHostAddress IPv4
ipv4)
IP.IPv6 IPv6
ipv6 -> PortNumber -> FlowInfo -> HostAddress6 -> FlowInfo -> SockAddr
SockAddrInet6 PortNumber
port FlowInfo
0 (IPv6 -> HostAddress6
IP.toHostAddress6 IPv6
ipv6) FlowInfo
0
nodeHostIPAddressToSockAddr :: NodeIPAddress -> SockAddr
nodeHostIPAddressToSockAddr :: NodeIPAddress -> SockAddr
nodeHostIPAddressToSockAddr NodeAddress { naHostAddress :: forall addr. NodeAddress' addr -> addr
naHostAddress = NodeHostIPAddress IP
ip, PortNumber
naPort :: PortNumber
naPort :: forall addr. NodeAddress' addr -> PortNumber
naPort } =
case IP
ip of
IPv4 IPv4
ipv4 -> PortNumber -> FlowInfo -> SockAddr
SockAddrInet (forall a b. (Integral a, Num b) => a -> b
fromIntegral PortNumber
naPort) (IPv4 -> FlowInfo
IP.toHostAddress IPv4
ipv4)
IPv6 IPv6
ipv6 -> PortNumber -> FlowInfo -> HostAddress6 -> FlowInfo -> SockAddr
SockAddrInet6 (forall a b. (Integral a, Num b) => a -> b
fromIntegral PortNumber
naPort) FlowInfo
0 (IPv6 -> HostAddress6
IP.toHostAddress6 IPv6
ipv6) FlowInfo
0
newtype NodeHostIPv4Address
= NodeHostIPv4Address { NodeHostIPv4Address -> IPv4
unNodeHostIPv4Address :: IPv4 }
deriving newtype Int -> NodeHostIPv4Address -> ShowS
[NodeHostIPv4Address] -> ShowS
NodeHostIPv4Address -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NodeHostIPv4Address] -> ShowS
$cshowList :: [NodeHostIPv4Address] -> ShowS
show :: NodeHostIPv4Address -> String
$cshow :: NodeHostIPv4Address -> String
showsPrec :: Int -> NodeHostIPv4Address -> ShowS
$cshowsPrec :: Int -> NodeHostIPv4Address -> ShowS
Show
deriving (NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
$c/= :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
== :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
$c== :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
Eq, Eq NodeHostIPv4Address
NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
NodeHostIPv4Address -> NodeHostIPv4Address -> Ordering
NodeHostIPv4Address -> NodeHostIPv4Address -> NodeHostIPv4Address
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: NodeHostIPv4Address -> NodeHostIPv4Address -> NodeHostIPv4Address
$cmin :: NodeHostIPv4Address -> NodeHostIPv4Address -> NodeHostIPv4Address
max :: NodeHostIPv4Address -> NodeHostIPv4Address -> NodeHostIPv4Address
$cmax :: NodeHostIPv4Address -> NodeHostIPv4Address -> NodeHostIPv4Address
>= :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
$c>= :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
> :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
$c> :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
<= :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
$c<= :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
< :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
$c< :: NodeHostIPv4Address -> NodeHostIPv4Address -> Bool
compare :: NodeHostIPv4Address -> NodeHostIPv4Address -> Ordering
$ccompare :: NodeHostIPv4Address -> NodeHostIPv4Address -> Ordering
Ord)
instance FromJSON NodeHostIPv4Address where
parseJSON :: Value -> Parser NodeHostIPv4Address
parseJSON (String Text
ipStr) =
case forall a. Read a => String -> Maybe a
readMaybe forall a b. (a -> b) -> a -> b
$ Text -> String
Text.unpack Text
ipStr of
Just IPv4
ip -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ IPv4 -> NodeHostIPv4Address
NodeHostIPv4Address IPv4
ip
Maybe IPv4
Nothing -> forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Parsing of IPv4 failed: " forall a. Semigroup a => a -> a -> a
<> Text -> String
Text.unpack Text
ipStr
parseJSON Value
invalid = forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Parsing of IPv4 failed due to type mismatch. "
forall a. Semigroup a => a -> a -> a
<> String
"Encountered: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Value
invalid forall a. Semigroup a => a -> a -> a
<> String
"\n"
instance ToJSON NodeHostIPv4Address where
toJSON :: NodeHostIPv4Address -> Value
toJSON (NodeHostIPv4Address IPv4
ip) = Text -> Value
String (String -> Text
Text.pack forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show IPv4
ip)
newtype NodeHostIPv6Address
= NodeHostIPv6Address { NodeHostIPv6Address -> IPv6
unNodeHostIPv6Address :: IPv6 }
deriving newtype Int -> NodeHostIPv6Address -> ShowS
[NodeHostIPv6Address] -> ShowS
NodeHostIPv6Address -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NodeHostIPv6Address] -> ShowS
$cshowList :: [NodeHostIPv6Address] -> ShowS
show :: NodeHostIPv6Address -> String
$cshow :: NodeHostIPv6Address -> String
showsPrec :: Int -> NodeHostIPv6Address -> ShowS
$cshowsPrec :: Int -> NodeHostIPv6Address -> ShowS
Show
deriving (NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
$c/= :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
== :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
$c== :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
Eq, Eq NodeHostIPv6Address
NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
NodeHostIPv6Address -> NodeHostIPv6Address -> Ordering
NodeHostIPv6Address -> NodeHostIPv6Address -> NodeHostIPv6Address
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: NodeHostIPv6Address -> NodeHostIPv6Address -> NodeHostIPv6Address
$cmin :: NodeHostIPv6Address -> NodeHostIPv6Address -> NodeHostIPv6Address
max :: NodeHostIPv6Address -> NodeHostIPv6Address -> NodeHostIPv6Address
$cmax :: NodeHostIPv6Address -> NodeHostIPv6Address -> NodeHostIPv6Address
>= :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
$c>= :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
> :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
$c> :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
<= :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
$c<= :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
< :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
$c< :: NodeHostIPv6Address -> NodeHostIPv6Address -> Bool
compare :: NodeHostIPv6Address -> NodeHostIPv6Address -> Ordering
$ccompare :: NodeHostIPv6Address -> NodeHostIPv6Address -> Ordering
Ord)
instance FromJSON NodeHostIPv6Address where
parseJSON :: Value -> Parser NodeHostIPv6Address
parseJSON (String Text
ipStr) =
case forall a. Read a => String -> Maybe a
readMaybe forall a b. (a -> b) -> a -> b
$ Text -> String
Text.unpack Text
ipStr of
Just IPv6
ip -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ IPv6 -> NodeHostIPv6Address
NodeHostIPv6Address IPv6
ip
Maybe IPv6
Nothing -> forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Parsing of IPv6 failed: " forall a. Semigroup a => a -> a -> a
<> Text -> String
Text.unpack Text
ipStr
parseJSON Value
invalid = forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Parsing of IPv6 failed due to type mismatch. "
forall a. Semigroup a => a -> a -> a
<> String
"Encountered: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Value
invalid forall a. Semigroup a => a -> a -> a
<> String
"\n"
instance ToJSON NodeHostIPv6Address where
toJSON :: NodeHostIPv6Address -> Value
toJSON (NodeHostIPv6Address IPv6
ip) = Text -> Value
String (String -> Text
Text.pack forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show IPv6
ip)
newtype NodeHostIPAddress
= NodeHostIPAddress { NodeHostIPAddress -> IP
unNodeHostIPAddress :: IP }
deriving newtype Int -> NodeHostIPAddress -> ShowS
[NodeHostIPAddress] -> ShowS
NodeHostIPAddress -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NodeHostIPAddress] -> ShowS
$cshowList :: [NodeHostIPAddress] -> ShowS
show :: NodeHostIPAddress -> String
$cshow :: NodeHostIPAddress -> String
showsPrec :: Int -> NodeHostIPAddress -> ShowS
$cshowsPrec :: Int -> NodeHostIPAddress -> ShowS
Show
deriving (NodeHostIPAddress -> NodeHostIPAddress -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
$c/= :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
== :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
$c== :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
Eq, Eq NodeHostIPAddress
NodeHostIPAddress -> NodeHostIPAddress -> Bool
NodeHostIPAddress -> NodeHostIPAddress -> Ordering
NodeHostIPAddress -> NodeHostIPAddress -> NodeHostIPAddress
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: NodeHostIPAddress -> NodeHostIPAddress -> NodeHostIPAddress
$cmin :: NodeHostIPAddress -> NodeHostIPAddress -> NodeHostIPAddress
max :: NodeHostIPAddress -> NodeHostIPAddress -> NodeHostIPAddress
$cmax :: NodeHostIPAddress -> NodeHostIPAddress -> NodeHostIPAddress
>= :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
$c>= :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
> :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
$c> :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
<= :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
$c<= :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
< :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
$c< :: NodeHostIPAddress -> NodeHostIPAddress -> Bool
compare :: NodeHostIPAddress -> NodeHostIPAddress -> Ordering
$ccompare :: NodeHostIPAddress -> NodeHostIPAddress -> Ordering
Ord)
instance FromJSON NodeHostIPAddress where
parseJSON :: Value -> Parser NodeHostIPAddress
parseJSON (String Text
ipStr) =
case forall a. Read a => String -> Maybe a
readMaybe forall a b. (a -> b) -> a -> b
$ Text -> String
Text.unpack Text
ipStr of
Just IP
ip -> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ IP -> NodeHostIPAddress
NodeHostIPAddress IP
ip
Maybe IP
Nothing -> forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Parsing of IP failed: " forall a. Semigroup a => a -> a -> a
<> Text -> String
Text.unpack Text
ipStr
parseJSON Value
invalid = forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Parsing of IP failed due to type mismatch. "
forall a. Semigroup a => a -> a -> a
<> String
"Encountered: " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show Value
invalid forall a. Semigroup a => a -> a -> a
<> String
"\n"
instance ToJSON NodeHostIPAddress where
toJSON :: NodeHostIPAddress -> Value
toJSON (NodeHostIPAddress IP
ip) = Text -> Value
String (String -> Text
Text.pack forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show IP
ip)
nodeHostIPv6AddressToIPAddress :: NodeHostIPv6Address -> NodeHostIPAddress
nodeHostIPv6AddressToIPAddress :: NodeHostIPv6Address -> NodeHostIPAddress
nodeHostIPv6AddressToIPAddress (NodeHostIPv6Address IPv6
ip) = IP -> NodeHostIPAddress
NodeHostIPAddress (IPv6 -> IP
IPv6 IPv6
ip)
nodeHostIPv4AddressToIPAddress :: NodeHostIPv4Address -> NodeHostIPAddress
nodeHostIPv4AddressToIPAddress :: NodeHostIPv4Address -> NodeHostIPAddress
nodeHostIPv4AddressToIPAddress (NodeHostIPv4Address IPv4
ip) = IP -> NodeHostIPAddress
NodeHostIPAddress (IPv4 -> IP
IPv4 IPv4
ip)
newtype NodeHostDnsAddress
= NodeHostDnsAddress { NodeHostDnsAddress -> Text
unNodeHostDnsAddress :: Text }
deriving newtype Int -> NodeHostDnsAddress -> ShowS
[NodeHostDnsAddress] -> ShowS
NodeHostDnsAddress -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NodeHostDnsAddress] -> ShowS
$cshowList :: [NodeHostDnsAddress] -> ShowS
show :: NodeHostDnsAddress -> String
$cshow :: NodeHostDnsAddress -> String
showsPrec :: Int -> NodeHostDnsAddress -> ShowS
$cshowsPrec :: Int -> NodeHostDnsAddress -> ShowS
Show
deriving (NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
$c/= :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
== :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
$c== :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
Eq, Eq NodeHostDnsAddress
NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
NodeHostDnsAddress -> NodeHostDnsAddress -> Ordering
NodeHostDnsAddress -> NodeHostDnsAddress -> NodeHostDnsAddress
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: NodeHostDnsAddress -> NodeHostDnsAddress -> NodeHostDnsAddress
$cmin :: NodeHostDnsAddress -> NodeHostDnsAddress -> NodeHostDnsAddress
max :: NodeHostDnsAddress -> NodeHostDnsAddress -> NodeHostDnsAddress
$cmax :: NodeHostDnsAddress -> NodeHostDnsAddress -> NodeHostDnsAddress
>= :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
$c>= :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
> :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
$c> :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
<= :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
$c<= :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
< :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
$c< :: NodeHostDnsAddress -> NodeHostDnsAddress -> Bool
compare :: NodeHostDnsAddress -> NodeHostDnsAddress -> Ordering
$ccompare :: NodeHostDnsAddress -> NodeHostDnsAddress -> Ordering
Ord)
nodeHostDnsAddressToDomain :: NodeHostDnsAddress -> DNS.Domain
nodeHostDnsAddressToDomain :: NodeHostDnsAddress -> Domain
nodeHostDnsAddressToDomain = Text -> Domain
Text.encodeUtf8 forall b c a. (b -> c) -> (a -> b) -> a -> c
. NodeHostDnsAddress -> Text
unNodeHostDnsAddress