module Ecluse.Runtime.Maintenance.CodeArtifact.Read.Internal (
ReadPlane (..),
RepositoryIdentity (..),
identityOfStore,
VersionObservation (..),
VersionOrigin (..),
observationsOfPage,
versionsOfPage,
storedOfObservation,
) where
import Amazonka.CodeArtifact qualified as CA
import Amazonka.CodeArtifact.Lens qualified as CAL
import Lens.Micro ((^.))
import Ecluse.Core.Ecosystem (Ecosystem)
import Ecluse.Core.Package (PackageName)
import Ecluse.Core.Registry.Maintenance (
StoreFault,
StoredVersion (..),
VersionPresence,
)
import Ecluse.Core.Registry.Maintenance.Upstream (UpstreamSafety)
import Ecluse.Core.Text (nonBlank)
import Ecluse.Core.Version (Version, mkVersion)
import Ecluse.Runtime.Maintenance.CodeArtifact.Decide (
CodeArtifactStore (..),
formatEcosystem,
presenceOf,
)
data ReadPlane = ReadPlane
{ ReadPlane
-> ListPackages -> IO (Either StoreFault ListPackagesResponse)
rpListPackages :: CA.ListPackages -> IO (Either StoreFault CA.ListPackagesResponse)
, ReadPlane
-> ListPackageVersions
-> IO (Either StoreFault ListPackageVersionsResponse)
rpListVersions :: CA.ListPackageVersions -> IO (Either StoreFault CA.ListPackageVersionsResponse)
, ReadPlane
-> DescribeRepository
-> IO (Either StoreFault DescribeRepositoryResponse)
rpDescribeRepository :: CA.DescribeRepository -> IO (Either StoreFault CA.DescribeRepositoryResponse)
, ReadPlane
-> DescribeRepository
-> IO (Either UpstreamSafety DescribeRepositoryResponse)
rpDescribeUpstream :: CA.DescribeRepository -> IO (Either UpstreamSafety CA.DescribeRepositoryResponse)
, ReadPlane
-> ListTagsForResource
-> IO (Either StoreFault ListTagsForResourceResponse)
rpListTags :: CA.ListTagsForResource -> IO (Either StoreFault CA.ListTagsForResourceResponse)
}
data RepositoryIdentity = RepositoryIdentity
{ RepositoryIdentity -> Text
ridDomainOwner :: Text
, RepositoryIdentity -> Text
ridRegion :: Text
, RepositoryIdentity -> Text
ridDomain :: Text
, RepositoryIdentity -> Text
ridRepository :: Text
, RepositoryIdentity -> Ecosystem
ridEcosystem :: Ecosystem
}
deriving stock (RepositoryIdentity -> RepositoryIdentity -> Bool
(RepositoryIdentity -> RepositoryIdentity -> Bool)
-> (RepositoryIdentity -> RepositoryIdentity -> Bool)
-> Eq RepositoryIdentity
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: RepositoryIdentity -> RepositoryIdentity -> Bool
== :: RepositoryIdentity -> RepositoryIdentity -> Bool
$c/= :: RepositoryIdentity -> RepositoryIdentity -> Bool
/= :: RepositoryIdentity -> RepositoryIdentity -> Bool
Eq, Int -> RepositoryIdentity -> ShowS
[RepositoryIdentity] -> ShowS
RepositoryIdentity -> String
(Int -> RepositoryIdentity -> ShowS)
-> (RepositoryIdentity -> String)
-> ([RepositoryIdentity] -> ShowS)
-> Show RepositoryIdentity
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> RepositoryIdentity -> ShowS
showsPrec :: Int -> RepositoryIdentity -> ShowS
$cshow :: RepositoryIdentity -> String
show :: RepositoryIdentity -> String
$cshowList :: [RepositoryIdentity] -> ShowS
showList :: [RepositoryIdentity] -> ShowS
Show)
identityOfStore :: CodeArtifactStore -> RepositoryIdentity
identityOfStore :: CodeArtifactStore -> RepositoryIdentity
identityOfStore CodeArtifactStore
store =
RepositoryIdentity
{ ridDomainOwner :: Text
ridDomainOwner = CodeArtifactStore -> Text
casDomainOwner CodeArtifactStore
store
, ridRegion :: Text
ridRegion = CodeArtifactStore -> Text
casRegion CodeArtifactStore
store
, ridDomain :: Text
ridDomain = CodeArtifactStore -> Text
casDomain CodeArtifactStore
store
, ridRepository :: Text
ridRepository = CodeArtifactStore -> Text
casRepository CodeArtifactStore
store
, ridEcosystem :: Ecosystem
ridEcosystem = CodeArtifactFormat -> Ecosystem
formatEcosystem (CodeArtifactStore -> CodeArtifactFormat
casFormat CodeArtifactStore
store)
}
data VersionOrigin = VersionOrigin
{ VersionOrigin -> Maybe PackageVersionOriginType
vorType :: Maybe CA.PackageVersionOriginType
, VersionOrigin -> Maybe Text
vorEntryRepository :: Maybe Text
, VersionOrigin -> Maybe Text
vorEntryConnection :: Maybe Text
}
deriving stock (VersionOrigin -> VersionOrigin -> Bool
(VersionOrigin -> VersionOrigin -> Bool)
-> (VersionOrigin -> VersionOrigin -> Bool) -> Eq VersionOrigin
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionOrigin -> VersionOrigin -> Bool
== :: VersionOrigin -> VersionOrigin -> Bool
$c/= :: VersionOrigin -> VersionOrigin -> Bool
/= :: VersionOrigin -> VersionOrigin -> Bool
Eq, Int -> VersionOrigin -> ShowS
[VersionOrigin] -> ShowS
VersionOrigin -> String
(Int -> VersionOrigin -> ShowS)
-> (VersionOrigin -> String)
-> ([VersionOrigin] -> ShowS)
-> Show VersionOrigin
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionOrigin -> ShowS
showsPrec :: Int -> VersionOrigin -> ShowS
$cshow :: VersionOrigin -> String
show :: VersionOrigin -> String
$cshowList :: [VersionOrigin] -> ShowS
showList :: [VersionOrigin] -> ShowS
Show)
data VersionObservation = VersionObservation
{ VersionObservation -> RepositoryIdentity
obsIdentity :: RepositoryIdentity
, VersionObservation -> PackageName
obsPackage :: PackageName
, VersionObservation -> Version
obsVersion :: Version
, VersionObservation -> PackageVersionStatus
obsStatus :: CA.PackageVersionStatus
, VersionObservation -> VersionPresence
obsPresence :: VersionPresence
, VersionObservation -> Maybe Text
obsRevision :: Maybe Text
, VersionObservation -> Maybe VersionOrigin
obsOrigin :: Maybe VersionOrigin
}
deriving stock (VersionObservation -> VersionObservation -> Bool
(VersionObservation -> VersionObservation -> Bool)
-> (VersionObservation -> VersionObservation -> Bool)
-> Eq VersionObservation
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: VersionObservation -> VersionObservation -> Bool
== :: VersionObservation -> VersionObservation -> Bool
$c/= :: VersionObservation -> VersionObservation -> Bool
/= :: VersionObservation -> VersionObservation -> Bool
Eq, Int -> VersionObservation -> ShowS
[VersionObservation] -> ShowS
VersionObservation -> String
(Int -> VersionObservation -> ShowS)
-> (VersionObservation -> String)
-> ([VersionObservation] -> ShowS)
-> Show VersionObservation
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> VersionObservation -> ShowS
showsPrec :: Int -> VersionObservation -> ShowS
$cshow :: VersionObservation -> String
show :: VersionObservation -> String
$cshowList :: [VersionObservation] -> ShowS
showList :: [VersionObservation] -> ShowS
Show)
observationsOfPage :: RepositoryIdentity -> PackageName -> [CA.PackageVersionSummary] -> [VersionObservation]
observationsOfPage :: RepositoryIdentity
-> PackageName -> [PackageVersionSummary] -> [VersionObservation]
observationsOfPage RepositoryIdentity
repository PackageName
name = (PackageVersionSummary -> VersionObservation)
-> [PackageVersionSummary] -> [VersionObservation]
forall a b. (a -> b) -> [a] -> [b]
map PackageVersionSummary -> VersionObservation
observed
where
observed :: PackageVersionSummary -> VersionObservation
observed PackageVersionSummary
summary =
VersionObservation
{ obsIdentity :: RepositoryIdentity
obsIdentity = RepositoryIdentity
repository
, obsPackage :: PackageName
obsPackage = PackageName
name
, obsVersion :: Version
obsVersion = Ecosystem -> Text -> Version
mkVersion (RepositoryIdentity -> Ecosystem
ridEcosystem RepositoryIdentity
repository) (PackageVersionSummary
summary PackageVersionSummary
-> Getting Text PackageVersionSummary Text -> Text
forall s a. s -> Getting a s a -> a
^. Getting Text PackageVersionSummary Text
Lens' PackageVersionSummary Text
CAL.packageVersionSummary_version)
, obsStatus :: PackageVersionStatus
obsStatus = PackageVersionSummary
summary PackageVersionSummary
-> Getting
PackageVersionStatus PackageVersionSummary PackageVersionStatus
-> PackageVersionStatus
forall s a. s -> Getting a s a -> a
^. Getting
PackageVersionStatus PackageVersionSummary PackageVersionStatus
Lens' PackageVersionSummary PackageVersionStatus
CAL.packageVersionSummary_status
, obsPresence :: VersionPresence
obsPresence = PackageVersionStatus -> VersionPresence
presenceOf (PackageVersionSummary
summary PackageVersionSummary
-> Getting
PackageVersionStatus PackageVersionSummary PackageVersionStatus
-> PackageVersionStatus
forall s a. s -> Getting a s a -> a
^. Getting
PackageVersionStatus PackageVersionSummary PackageVersionStatus
Lens' PackageVersionSummary PackageVersionStatus
CAL.packageVersionSummary_status)
, obsRevision :: Maybe Text
obsRevision = Text -> Maybe Text
nonBlank (Text -> Maybe Text) -> Maybe Text -> Maybe Text
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< PackageVersionSummary
summary PackageVersionSummary
-> Getting (Maybe Text) PackageVersionSummary (Maybe Text)
-> Maybe Text
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Text) PackageVersionSummary (Maybe Text)
Lens' PackageVersionSummary (Maybe Text)
CAL.packageVersionSummary_revision
, obsOrigin :: Maybe VersionOrigin
obsOrigin = PackageVersionOrigin -> VersionOrigin
originOf (PackageVersionOrigin -> VersionOrigin)
-> Maybe PackageVersionOrigin -> Maybe VersionOrigin
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> PackageVersionSummary
summary PackageVersionSummary
-> Getting
(Maybe PackageVersionOrigin)
PackageVersionSummary
(Maybe PackageVersionOrigin)
-> Maybe PackageVersionOrigin
forall s a. s -> Getting a s a -> a
^. Getting
(Maybe PackageVersionOrigin)
PackageVersionSummary
(Maybe PackageVersionOrigin)
Lens' PackageVersionSummary (Maybe PackageVersionOrigin)
CAL.packageVersionSummary_origin
}
versionsOfPage :: RepositoryIdentity -> PackageName -> [CA.PackageVersionSummary] -> [StoredVersion]
versionsOfPage :: RepositoryIdentity
-> PackageName -> [PackageVersionSummary] -> [StoredVersion]
versionsOfPage RepositoryIdentity
repository PackageName
name = (VersionObservation -> StoredVersion)
-> [VersionObservation] -> [StoredVersion]
forall a b. (a -> b) -> [a] -> [b]
map VersionObservation -> StoredVersion
storedOfObservation ([VersionObservation] -> [StoredVersion])
-> ([PackageVersionSummary] -> [VersionObservation])
-> [PackageVersionSummary]
-> [StoredVersion]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. RepositoryIdentity
-> PackageName -> [PackageVersionSummary] -> [VersionObservation]
observationsOfPage RepositoryIdentity
repository PackageName
name
storedOfObservation :: VersionObservation -> StoredVersion
storedOfObservation :: VersionObservation -> StoredVersion
storedOfObservation VersionObservation
observation =
StoredVersion
{ storedVersion :: Version
storedVersion = VersionObservation -> Version
obsVersion VersionObservation
observation
, storedPresence :: VersionPresence
storedPresence = VersionObservation -> VersionPresence
obsPresence VersionObservation
observation
, storedRevision :: Maybe Text
storedRevision = VersionObservation -> Maybe Text
obsRevision VersionObservation
observation
}
originOf :: CA.PackageVersionOrigin -> VersionOrigin
originOf :: PackageVersionOrigin -> VersionOrigin
originOf PackageVersionOrigin
origin =
VersionOrigin
{ vorType :: Maybe PackageVersionOriginType
vorType = PackageVersionOrigin
origin PackageVersionOrigin
-> Getting
(Maybe PackageVersionOriginType)
PackageVersionOrigin
(Maybe PackageVersionOriginType)
-> Maybe PackageVersionOriginType
forall s a. s -> Getting a s a -> a
^. Getting
(Maybe PackageVersionOriginType)
PackageVersionOrigin
(Maybe PackageVersionOriginType)
Lens' PackageVersionOrigin (Maybe PackageVersionOriginType)
CAL.packageVersionOrigin_originType
, vorEntryRepository :: Maybe Text
vorEntryRepository = Text -> Maybe Text
nonBlank (Text -> Maybe Text) -> Maybe Text -> Maybe Text
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Maybe DomainEntryPoint
entry Maybe DomainEntryPoint
-> (DomainEntryPoint -> Maybe Text) -> Maybe Text
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (DomainEntryPoint
-> Getting (Maybe Text) DomainEntryPoint (Maybe Text) -> Maybe Text
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Text) DomainEntryPoint (Maybe Text)
Lens' DomainEntryPoint (Maybe Text)
CAL.domainEntryPoint_repositoryName))
, vorEntryConnection :: Maybe Text
vorEntryConnection = Text -> Maybe Text
nonBlank (Text -> Maybe Text) -> Maybe Text -> Maybe Text
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Maybe DomainEntryPoint
entry Maybe DomainEntryPoint
-> (DomainEntryPoint -> Maybe Text) -> Maybe Text
forall a b. Maybe a -> (a -> Maybe b) -> Maybe b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (DomainEntryPoint
-> Getting (Maybe Text) DomainEntryPoint (Maybe Text) -> Maybe Text
forall s a. s -> Getting a s a -> a
^. Getting (Maybe Text) DomainEntryPoint (Maybe Text)
Lens' DomainEntryPoint (Maybe Text)
CAL.domainEntryPoint_externalConnectionName))
}
where
entry :: Maybe DomainEntryPoint
entry = PackageVersionOrigin
origin PackageVersionOrigin
-> Getting
(Maybe DomainEntryPoint)
PackageVersionOrigin
(Maybe DomainEntryPoint)
-> Maybe DomainEntryPoint
forall s a. s -> Getting a s a -> a
^. Getting
(Maybe DomainEntryPoint)
PackageVersionOrigin
(Maybe DomainEntryPoint)
Lens' PackageVersionOrigin (Maybe DomainEntryPoint)
CAL.packageVersionOrigin_domainEntryPoint