-- | -- Module : Amazonka.Endpoint -- Copyright : (c) 2013-2023 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : provisional -- Portability : non-portable (GHC extensions) module Amazonka.Endpoint ( -- * Endpoint setEndpoint, defaultEndpoint, ) where import Amazonka.Data.ByteString import Amazonka.Prelude import Amazonka.Types import qualified Data.CaseInsensitive as CI -- | A convenience function for overriding the 'Service' 'Endpoint'. -- -- /See:/ 'endpoint'. setEndpoint :: -- | Whether to use HTTPS (ie. SSL). Bool -> -- | The hostname to connect to. ByteString -> -- | The port number to connect to. Int -> -- | The service configuration to override. Service -> Service setEndpoint secure host port s@Service {endpoint} = s {endpoint = \r -> (endpoint r) {secure, host, port}} -- | Determine the full host address and credential scope -- within the specified 'Region'. defaultEndpoint :: Service -> Region -> Endpoint defaultEndpoint Service {endpointPrefix = p} r = go (CI.mk p) where go = \case "iam" | china -> region "iam.cn-north-1.amazonaws.com.cn" | govcloud -> region "iam.us-gov.amazonaws.com" | otherwise -> global "iam.amazonaws.com" "sdb" | virginia -> region "sdb.amazonaws.com" "sts" | china -> region "sts.cn-north-1.amazonaws.com.cn" | govcloud -> region ("sts." <> reg <> ".amazonaws.com") | otherwise -> global "sts.amazonaws.com" "rds" | virginia -> global "rds.amazonaws.com" "route53" | not china -> global "route53.amazonaws.com" "emr" | virginia -> global "elasticmapreduce.us-east-1.amazonaws.com" | china -> region "elasticmapreduce.cn-north-1.amazonaws.com.cn" | frankfurt -> region "elasticmapreduce.eu-central-1.amazonaws.com" | otherwise -> region (reg <> ".elasticmapreduce.amazonaws.com") "sqs" | virginia -> global "queue.amazonaws.com" | china -> region (reg <> ".queue.amazonaws.com.cn") "importexport" | not china -> region "importexport.amazonaws.com" "cloudfront" | not china -> global "cloudfront.amazonaws.com" "waf" | not china -> global "waf.amazonaws.com" _other | china -> region (p <> "." <> reg <> ".amazonaws.com.cn") | otherwise -> region (p <> "." <> reg <> ".amazonaws.com") virginia = r == NorthVirginia frankfurt = r == Frankfurt china = r == Beijing govcloud = r == GovCloudEast || r == GovCloudWest region host = Endpoint { host, basePath = mempty, secure = True, port = 443, scope = reg } global host = Endpoint { host, basePath = mempty, secure = True, port = 443, scope = "us-east-1" } reg = toBS r