-- |
-- Module      : Network.DNS.Pattern.Internal
-- Description : Internal pattern types and definitions
--
-- This module is not part of public API and may change even between patch versions.
module Network.DNS.Pattern.Internal
  ( DomainLabel(..)
  , Domain(..)
  , LabelPattern(..)
  , DomainPattern(..)
  )

where

import Network.DNS.Internal

-- | A domain pattern.
newtype DomainPattern = DomainPattern
  { DomainPattern -> [LabelPattern]
getDomainPattern :: [LabelPattern]
  } deriving (DomainPattern -> DomainPattern -> Bool
(DomainPattern -> DomainPattern -> Bool)
-> (DomainPattern -> DomainPattern -> Bool) -> Eq DomainPattern
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DomainPattern -> DomainPattern -> Bool
$c/= :: DomainPattern -> DomainPattern -> Bool
== :: DomainPattern -> DomainPattern -> Bool
$c== :: DomainPattern -> DomainPattern -> Bool
Eq, Eq DomainPattern
Eq DomainPattern
-> (DomainPattern -> DomainPattern -> Ordering)
-> (DomainPattern -> DomainPattern -> Bool)
-> (DomainPattern -> DomainPattern -> Bool)
-> (DomainPattern -> DomainPattern -> Bool)
-> (DomainPattern -> DomainPattern -> Bool)
-> (DomainPattern -> DomainPattern -> DomainPattern)
-> (DomainPattern -> DomainPattern -> DomainPattern)
-> Ord DomainPattern
DomainPattern -> DomainPattern -> Bool
DomainPattern -> DomainPattern -> Ordering
DomainPattern -> DomainPattern -> DomainPattern
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 :: DomainPattern -> DomainPattern -> DomainPattern
$cmin :: DomainPattern -> DomainPattern -> DomainPattern
max :: DomainPattern -> DomainPattern -> DomainPattern
$cmax :: DomainPattern -> DomainPattern -> DomainPattern
>= :: DomainPattern -> DomainPattern -> Bool
$c>= :: DomainPattern -> DomainPattern -> Bool
> :: DomainPattern -> DomainPattern -> Bool
$c> :: DomainPattern -> DomainPattern -> Bool
<= :: DomainPattern -> DomainPattern -> Bool
$c<= :: DomainPattern -> DomainPattern -> Bool
< :: DomainPattern -> DomainPattern -> Bool
$c< :: DomainPattern -> DomainPattern -> Bool
compare :: DomainPattern -> DomainPattern -> Ordering
$ccompare :: DomainPattern -> DomainPattern -> Ordering
Ord)

-- | A pattern for a singular label.
data LabelPattern
  = DomLiteral DomainLabel -- ^ Represents an exact label that must be matched.
  | DomGlob -- ^ Represents a single asterisk glob matching any arbitrary domain at a given level.
  | DomGlobStar -- ^ Represents a double asterisk matching any arbitrary subdomain at a given level.
  deriving (LabelPattern -> LabelPattern -> Bool
(LabelPattern -> LabelPattern -> Bool)
-> (LabelPattern -> LabelPattern -> Bool) -> Eq LabelPattern
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LabelPattern -> LabelPattern -> Bool
$c/= :: LabelPattern -> LabelPattern -> Bool
== :: LabelPattern -> LabelPattern -> Bool
$c== :: LabelPattern -> LabelPattern -> Bool
Eq, Eq LabelPattern
Eq LabelPattern
-> (LabelPattern -> LabelPattern -> Ordering)
-> (LabelPattern -> LabelPattern -> Bool)
-> (LabelPattern -> LabelPattern -> Bool)
-> (LabelPattern -> LabelPattern -> Bool)
-> (LabelPattern -> LabelPattern -> Bool)
-> (LabelPattern -> LabelPattern -> LabelPattern)
-> (LabelPattern -> LabelPattern -> LabelPattern)
-> Ord LabelPattern
LabelPattern -> LabelPattern -> Bool
LabelPattern -> LabelPattern -> Ordering
LabelPattern -> LabelPattern -> LabelPattern
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 :: LabelPattern -> LabelPattern -> LabelPattern
$cmin :: LabelPattern -> LabelPattern -> LabelPattern
max :: LabelPattern -> LabelPattern -> LabelPattern
$cmax :: LabelPattern -> LabelPattern -> LabelPattern
>= :: LabelPattern -> LabelPattern -> Bool
$c>= :: LabelPattern -> LabelPattern -> Bool
> :: LabelPattern -> LabelPattern -> Bool
$c> :: LabelPattern -> LabelPattern -> Bool
<= :: LabelPattern -> LabelPattern -> Bool
$c<= :: LabelPattern -> LabelPattern -> Bool
< :: LabelPattern -> LabelPattern -> Bool
$c< :: LabelPattern -> LabelPattern -> Bool
compare :: LabelPattern -> LabelPattern -> Ordering
$ccompare :: LabelPattern -> LabelPattern -> Ordering
Ord)