module Iri.Data.Instances.Hashable
where

import Iri.Prelude
import Iri.Data.Types
import Iri.Data.Instances.Generic
import qualified Net.IPv6 as B


instance Hashable Iri

instance Hashable Scheme

instance Hashable Hierarchy

instance Hashable Authority

instance Hashable UserInfo

instance Hashable User

instance Hashable Password

instance Hashable Host where
  hashWithSalt salt host =
    hashWithSalt salt $
    case host of
      NamedHost regName -> hashWithSalt 0 regName
      IpV4Host ip -> hashWithSalt 1 ip
      IpV6Host (B.IPv6 a b) -> (hashWithSalt (hashWithSalt 2 a) b)

instance Hashable RegName

instance Hashable DomainLabel

instance Hashable Port

instance Hashable Path

instance Hashable PathSegment

instance Hashable Query

instance Hashable Fragment

instance Hashable HttpIri

instance Hashable Security