{-# LANGUAGE RoleAnnotations #-}
module Ecluse.Core.Registry.Origin (
OriginClient (..),
originClient,
originBaseUrl,
OriginFor,
Public,
Private,
anonymousOrigin,
perCallerOrigin,
originClientOf,
chargingFullReads,
) where
import Network.HTTP.Client (Manager)
import Ecluse.Core.Credential (ClientCredential)
import Ecluse.Core.Security (Limits)
import Ecluse.Core.Security.Egress (RegistryUrl, registryUrlText)
data OriginClient = OriginClient
{ OriginClient -> RegistryUrl
ocBaseUrl :: RegistryUrl
, OriginClient -> Manager
ocManager :: Manager
, OriginClient -> Maybe ClientCredential
ocToken :: Maybe ClientCredential
, OriginClient -> Limits
ocLimits :: Limits
, OriginClient -> Int -> IO ()
ocChargeFullRead :: Int -> IO ()
}
originClient :: Limits -> Manager -> RegistryUrl -> Maybe ClientCredential -> OriginClient
originClient :: Limits
-> Manager -> RegistryUrl -> Maybe ClientCredential -> OriginClient
originClient Limits
limits Manager
manager RegistryUrl
baseUrl Maybe ClientCredential
token =
OriginClient{ocBaseUrl :: RegistryUrl
ocBaseUrl = RegistryUrl
baseUrl, ocManager :: Manager
ocManager = Manager
manager, ocToken :: Maybe ClientCredential
ocToken = Maybe ClientCredential
token, ocLimits :: Limits
ocLimits = Limits
limits, ocChargeFullRead :: Int -> IO ()
ocChargeFullRead = IO () -> Int -> IO ()
forall a b. a -> b -> a
const IO ()
forall (f :: * -> *). Applicative f => f ()
pass}
originBaseUrl :: OriginClient -> Text
originBaseUrl :: OriginClient -> Text
originBaseUrl = RegistryUrl -> Text
registryUrlText (RegistryUrl -> Text)
-> (OriginClient -> RegistryUrl) -> OriginClient -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. OriginClient -> RegistryUrl
ocBaseUrl
newtype OriginFor (posture :: Type) = OriginFor OriginClient
type role OriginFor nominal
data Public
data Private
anonymousOrigin :: Limits -> Manager -> RegistryUrl -> OriginFor Public
anonymousOrigin :: Limits -> Manager -> RegistryUrl -> OriginFor Public
anonymousOrigin Limits
limits Manager
manager RegistryUrl
baseUrl = OriginClient -> OriginFor Public
forall posture. OriginClient -> OriginFor posture
OriginFor (Limits
-> Manager -> RegistryUrl -> Maybe ClientCredential -> OriginClient
originClient Limits
limits Manager
manager RegistryUrl
baseUrl Maybe ClientCredential
forall a. Maybe a
Nothing)
perCallerOrigin :: Limits -> Manager -> RegistryUrl -> Maybe ClientCredential -> OriginFor Private
perCallerOrigin :: Limits
-> Manager
-> RegistryUrl
-> Maybe ClientCredential
-> OriginFor Private
perCallerOrigin Limits
limits Manager
manager RegistryUrl
baseUrl Maybe ClientCredential
token = OriginClient -> OriginFor Private
forall posture. OriginClient -> OriginFor posture
OriginFor (Limits
-> Manager -> RegistryUrl -> Maybe ClientCredential -> OriginClient
originClient Limits
limits Manager
manager RegistryUrl
baseUrl Maybe ClientCredential
token)
originClientOf :: OriginFor posture -> OriginClient
originClientOf :: forall posture. OriginFor posture -> OriginClient
originClientOf (OriginFor OriginClient
client) = OriginClient
client
chargingFullReads :: (Int -> IO ()) -> OriginFor posture -> OriginFor posture
chargingFullReads :: forall posture.
(Int -> IO ()) -> OriginFor posture -> OriginFor posture
chargingFullReads Int -> IO ()
charge (OriginFor OriginClient
client) = OriginClient -> OriginFor posture
forall posture. OriginClient -> OriginFor posture
OriginFor OriginClient
client{ocChargeFullRead = charge}