Copyright | This file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package including this file may be copied modified propagated or distributed except according to the terms contained in the LICENSE file. |
---|---|
License | BSD-2-Clause |
Safe Haskell | None |
Language | Haskell2010 |
The module exports internal types along with their constructors.
The rendering code relies on the newtype wrappers around Text
to
keep out invalid characters. Prefer to use the official interface
if possible.
Synopsis
- data Error
- data EmailAddr = EmailAddr {
- _displayName :: Maybe DisplayName
- _localPart :: LocalPart
- _domain :: Domain
- _comments :: [Comment]
- displayName :: Lens' EmailAddr (Maybe DisplayName)
- localPart :: Lens' EmailAddr LocalPart
- domain :: Lens' EmailAddr Domain
- comments :: Lens' EmailAddr [Comment]
- newtype DisplayName = DP {}
- newtype LocalPart = LP {}
- data Domain
- _Domain :: Prism' Domain DomainName
- _DomainLiteral :: Prism' Domain AddressLiteral
- newtype DomainName = DN {}
- newtype HostName = HN {
- hostNameText :: Text
- _HostNames :: Iso' DomainName [HostName]
- data AddressLiteral
- _IpAddressLiteral :: Prism' AddressLiteral IP
- _TaggedAddressLiteral :: Prism' AddressLiteral (AddressTag, Literal)
- _AddressLiteral :: Prism' AddressLiteral Literal
- newtype AddressTag = AT {}
- newtype Literal = Lit {
- literalText :: Text
- data Comment = Comment CommentLoc CommentContent
- _Comment :: Prism' Comment (CommentLoc, CommentContent)
- commentLoc :: Lens' Comment CommentLoc
- commentContent :: Lens' Comment CommentContent
- data CommentLoc
- newtype CommentContent = CC {}
Documentation
Potential validation errors.
Since: 0.1.0.0
InvalidPrefixError Text | A component of an email address may not start with the recorded prefix text. |
InvalidSuffixError Text | A component of an email address may not end with the recorded suffix text. |
InvalidCharactersError Text | A component of an email address contains invalid characters. |
InvalidLengthError Int Int Int | A component of an email address does not meet the set length
requirements. The values in this constructor are |
ParserFailedError Text | The input to the address decoder was not a valid email address and produced the recorded error message. |
The representation of a complete email address.
The parser preserves optional components such as the display name
and comments. The rendering code can optionally include these
optional elements when turning the address back into Text
.
Since: 0.1.0.0
EmailAddr | |
|
displayName :: Lens' EmailAddr (Maybe DisplayName) Source #
Optional display name. Addresses in the name-addr
format
from RFC 5322 allow descriptive text to precede the address.
This is commonly used in email messages to list the name of the
address' owner.
Since: 0.1.0.0
comments :: Lens' EmailAddr [Comment] Source #
Addresses in both the name-addr
and addr-spec
formats
support comments.
Since: 0.1.0.0
newtype DisplayName Source #
Optional display name. Usually this is the name of the person who receives email at the associated address.
Display Name <example@example.com>
Since: 0.1.0.0
Instances
Eq DisplayName Source # | |
Defined in Addy.Internal.Types (==) :: DisplayName -> DisplayName -> Bool # (/=) :: DisplayName -> DisplayName -> Bool # | |
Show DisplayName Source # | |
Defined in Addy.Internal.Types showsPrec :: Int -> DisplayName -> ShowS # show :: DisplayName -> String # showList :: [DisplayName] -> ShowS # | |
Semigroup DisplayName Source # | |
Defined in Addy.Internal.Types (<>) :: DisplayName -> DisplayName -> DisplayName # sconcat :: NonEmpty DisplayName -> DisplayName # stimes :: Integral b => b -> DisplayName -> DisplayName # |
The name of the mailbox on the associated Domain
.
Since: 0.1.0.0
A fully-qualified domain name or an address literal.
Most email addresses use a domain name. However, it's perfectly
legal to use an AddressLiteral
instead.
Since: 0.1.0.0
_DomainLiteral :: Prism' Domain AddressLiteral Source #
Prism for working with domain literals.
Since: 0.1.0.0
newtype DomainName Source #
A fully-qualified domain name which is made up of a list of host names (labels) separated by dots.
Since: 0.1.0.0
Instances
Eq DomainName Source # | |
Defined in Addy.Internal.Types (==) :: DomainName -> DomainName -> Bool # (/=) :: DomainName -> DomainName -> Bool # | |
Show DomainName Source # | |
Defined in Addy.Internal.Types showsPrec :: Int -> DomainName -> ShowS # show :: DomainName -> String # showList :: [DomainName] -> ShowS # | |
Semigroup DomainName Source # | |
Defined in Addy.Internal.Types (<>) :: DomainName -> DomainName -> DomainName # sconcat :: NonEmpty DomainName -> DomainName # stimes :: Integral b => b -> DomainName -> DomainName # |
The name of one host component of a domain name.
Since: 0.1.0.0
HN | |
|
_HostNames :: Iso' DomainName [HostName] Source #
Iso for converting between domain names and a list of host names.
>>>
"gmail.uk.co" ^. _DomainName._HostNames & map (review _HostName)
["gmail","uk","co"]
Since: 0.1.0.0
data AddressLiteral Source #
Address literals can be used instead of a domain name to direct mail to a specific IP address or other tagged address type.
Example email addresses with address literals:
example@[127.0.0.1] example@[IPv6:1111:2222:3333:4444:5555:6666:7777] example@[Just-some-text]
Since: 0.1.0.0
IpAddressLiteral IP | A literal IP address as defined in RFC 5321 §4.1.3. The address can be in many formats so it is presented here in its parsed form. |
TaggedAddressLiteral AddressTag Literal | RFC 5321 also defines a general address literal where a standardized tag precedes the address itself. The only information provided about the standardized tag is: Standardized-tag MUST be specified in a Standards-Track RFC and registered with IANA |
AddressLiteral Literal | RFC 5322 defines a If an address literal cannot be parsed in one of the proceeding
formats it is encoded as a |
Instances
Eq AddressLiteral Source # | |
Defined in Addy.Internal.Types (==) :: AddressLiteral -> AddressLiteral -> Bool # (/=) :: AddressLiteral -> AddressLiteral -> Bool # | |
Show AddressLiteral Source # | |
Defined in Addy.Internal.Types showsPrec :: Int -> AddressLiteral -> ShowS # show :: AddressLiteral -> String # showList :: [AddressLiteral] -> ShowS # |
_IpAddressLiteral :: Prism' AddressLiteral IP Source #
Prism for working with IP address literals.
Since: 0.1.0.0
_TaggedAddressLiteral :: Prism' AddressLiteral (AddressTag, Literal) Source #
Prism for working with tagged address literals.
Since: 0.1.0.0
_AddressLiteral :: Prism' AddressLiteral Literal Source #
Prism for working with address literals.
Since: 0.1.0.0
newtype AddressTag Source #
A tag that can be used with a TaggedAddressLiteral
.
Since: 0.1.0.0
Instances
Eq AddressTag Source # | |
Defined in Addy.Internal.Types (==) :: AddressTag -> AddressTag -> Bool # (/=) :: AddressTag -> AddressTag -> Bool # | |
Show AddressTag Source # | |
Defined in Addy.Internal.Types showsPrec :: Int -> AddressTag -> ShowS # show :: AddressTag -> String # showList :: [AddressTag] -> ShowS # | |
Semigroup AddressTag Source # | |
Defined in Addy.Internal.Types (<>) :: AddressTag -> AddressTag -> AddressTag # sconcat :: NonEmpty AddressTag -> AddressTag # stimes :: Integral b => b -> AddressTag -> AddressTag # |
A literal address that can be used with a TaggedAddressLiteral
or AddressLiteral
.
Since: 0.1.0.0
Lit | |
|
A comment which may appear in an email address in a specific location.
Since: 0.1.0.0
_Comment :: Prism' Comment (CommentLoc, CommentContent) Source #
Prism for working with a Comment
.
Since: 0.1.0.0
commentLoc :: Lens' Comment CommentLoc Source #
Lens for working with comment locations.
Since: 0.1.0.0
commentContent :: Lens' Comment CommentContent Source #
Lens for working with comment contents.
Since: 0.1.0.0
data CommentLoc Source #
The location where a comment was parsed or where it should be rendered.
Since: 0.1.0.0
BeforeDisplayName | Just before the |
AfterDisplayName | Just after the |
BeforeLocalPart | Before the |
AfterDomain | After the |
AfterAddress | After the complete address. |
Instances
Eq CommentLoc Source # | |
Defined in Addy.Internal.Types (==) :: CommentLoc -> CommentLoc -> Bool # (/=) :: CommentLoc -> CommentLoc -> Bool # | |
Show CommentLoc Source # | |
Defined in Addy.Internal.Types showsPrec :: Int -> CommentLoc -> ShowS # show :: CommentLoc -> String # showList :: [CommentLoc] -> ShowS # |
newtype CommentContent Source #
Text that can appear in a comment.
Since: 0.1.0.0
Instances
Eq CommentContent Source # | |
Defined in Addy.Internal.Types (==) :: CommentContent -> CommentContent -> Bool # (/=) :: CommentContent -> CommentContent -> Bool # | |
Show CommentContent Source # | |
Defined in Addy.Internal.Types showsPrec :: Int -> CommentContent -> ShowS # show :: CommentContent -> String # showList :: [CommentContent] -> ShowS # | |
Semigroup CommentContent Source # | |
Defined in Addy.Internal.Types (<>) :: CommentContent -> CommentContent -> CommentContent # sconcat :: NonEmpty CommentContent -> CommentContent # stimes :: Integral b => b -> CommentContent -> CommentContent # |