{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
module Data.RFC5322.Address.Types
(
Mailbox(..)
, Address(..)
, AddrSpec(..)
, Domain(..)
) where
import Control.DeepSeq (NFData)
import qualified Data.Text as T
import qualified Data.ByteString as B
import Data.List.NonEmpty (NonEmpty)
import GHC.Generics (Generic)
data Mailbox =
Mailbox (Maybe T.Text )
AddrSpec
deriving (Int -> Mailbox -> ShowS
[Mailbox] -> ShowS
Mailbox -> String
(Int -> Mailbox -> ShowS)
-> (Mailbox -> String) -> ([Mailbox] -> ShowS) -> Show Mailbox
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Mailbox] -> ShowS
$cshowList :: [Mailbox] -> ShowS
show :: Mailbox -> String
$cshow :: Mailbox -> String
showsPrec :: Int -> Mailbox -> ShowS
$cshowsPrec :: Int -> Mailbox -> ShowS
Show, Mailbox -> Mailbox -> Bool
(Mailbox -> Mailbox -> Bool)
-> (Mailbox -> Mailbox -> Bool) -> Eq Mailbox
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Mailbox -> Mailbox -> Bool
$c/= :: Mailbox -> Mailbox -> Bool
== :: Mailbox -> Mailbox -> Bool
$c== :: Mailbox -> Mailbox -> Bool
Eq, (forall x. Mailbox -> Rep Mailbox x)
-> (forall x. Rep Mailbox x -> Mailbox) -> Generic Mailbox
forall x. Rep Mailbox x -> Mailbox
forall x. Mailbox -> Rep Mailbox x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Mailbox x -> Mailbox
$cfrom :: forall x. Mailbox -> Rep Mailbox x
Generic, Mailbox -> ()
(Mailbox -> ()) -> NFData Mailbox
forall a. (a -> ()) -> NFData a
rnf :: Mailbox -> ()
$crnf :: Mailbox -> ()
NFData)
data AddrSpec =
AddrSpec B.ByteString
Domain
deriving (Int -> AddrSpec -> ShowS
[AddrSpec] -> ShowS
AddrSpec -> String
(Int -> AddrSpec -> ShowS)
-> (AddrSpec -> String) -> ([AddrSpec] -> ShowS) -> Show AddrSpec
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AddrSpec] -> ShowS
$cshowList :: [AddrSpec] -> ShowS
show :: AddrSpec -> String
$cshow :: AddrSpec -> String
showsPrec :: Int -> AddrSpec -> ShowS
$cshowsPrec :: Int -> AddrSpec -> ShowS
Show, AddrSpec -> AddrSpec -> Bool
(AddrSpec -> AddrSpec -> Bool)
-> (AddrSpec -> AddrSpec -> Bool) -> Eq AddrSpec
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AddrSpec -> AddrSpec -> Bool
$c/= :: AddrSpec -> AddrSpec -> Bool
== :: AddrSpec -> AddrSpec -> Bool
$c== :: AddrSpec -> AddrSpec -> Bool
Eq, (forall x. AddrSpec -> Rep AddrSpec x)
-> (forall x. Rep AddrSpec x -> AddrSpec) -> Generic AddrSpec
forall x. Rep AddrSpec x -> AddrSpec
forall x. AddrSpec -> Rep AddrSpec x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep AddrSpec x -> AddrSpec
$cfrom :: forall x. AddrSpec -> Rep AddrSpec x
Generic, AddrSpec -> ()
(AddrSpec -> ()) -> NFData AddrSpec
forall a. (a -> ()) -> NFData a
rnf :: AddrSpec -> ()
$crnf :: AddrSpec -> ()
NFData)
data Address
= Single Mailbox
| Group T.Text
[Mailbox]
deriving (Int -> Address -> ShowS
[Address] -> ShowS
Address -> String
(Int -> Address -> ShowS)
-> (Address -> String) -> ([Address] -> ShowS) -> Show Address
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Address] -> ShowS
$cshowList :: [Address] -> ShowS
show :: Address -> String
$cshow :: Address -> String
showsPrec :: Int -> Address -> ShowS
$cshowsPrec :: Int -> Address -> ShowS
Show, Address -> Address -> Bool
(Address -> Address -> Bool)
-> (Address -> Address -> Bool) -> Eq Address
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Address -> Address -> Bool
$c/= :: Address -> Address -> Bool
== :: Address -> Address -> Bool
$c== :: Address -> Address -> Bool
Eq, (forall x. Address -> Rep Address x)
-> (forall x. Rep Address x -> Address) -> Generic Address
forall x. Rep Address x -> Address
forall x. Address -> Rep Address x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Address x -> Address
$cfrom :: forall x. Address -> Rep Address x
Generic, Address -> ()
(Address -> ()) -> NFData Address
forall a. (a -> ()) -> NFData a
rnf :: Address -> ()
$crnf :: Address -> ()
NFData)
data Domain
= DomainDotAtom (NonEmpty B.ByteString )
| DomainLiteral B.ByteString
deriving (Int -> Domain -> ShowS
[Domain] -> ShowS
Domain -> String
(Int -> Domain -> ShowS)
-> (Domain -> String) -> ([Domain] -> ShowS) -> Show Domain
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Domain] -> ShowS
$cshowList :: [Domain] -> ShowS
show :: Domain -> String
$cshow :: Domain -> String
showsPrec :: Int -> Domain -> ShowS
$cshowsPrec :: Int -> Domain -> ShowS
Show, Domain -> Domain -> Bool
(Domain -> Domain -> Bool)
-> (Domain -> Domain -> Bool) -> Eq Domain
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Domain -> Domain -> Bool
$c/= :: Domain -> Domain -> Bool
== :: Domain -> Domain -> Bool
$c== :: Domain -> Domain -> Bool
Eq, (forall x. Domain -> Rep Domain x)
-> (forall x. Rep Domain x -> Domain) -> Generic Domain
forall x. Rep Domain x -> Domain
forall x. Domain -> Rep Domain x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Domain x -> Domain
$cfrom :: forall x. Domain -> Rep Domain x
Generic, Domain -> ()
(Domain -> ()) -> NFData Domain
forall a. (a -> ()) -> NFData a
rnf :: Domain -> ()
$crnf :: Domain -> ()
NFData)