packages feed

keiro-dsl-0.4.0.1: test/conformance-structural/Conformance/Structural/Domain.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}

module Conformance.Structural.Domain (
    ArtifactInfo (..),
    ArtifactMetadata (..),
    ArtifactKind (..),
    ArtifactLocation (..),
    Geometry (..),
) where

import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON, ToJSON)
import Data.Proxy (Proxy)
import Data.Text (Text)
import GHC.Generics (Generic)
import Keiki.Shape (CanonicalTypeName (..))

data ArtifactInfo = ArtifactInfo
    { artifactKey :: !Text
    , displayName :: !Text
    , artifactHash :: !(Maybe Text)
    , artifactKind :: !ArtifactKind
    , location :: !ArtifactLocation
    , metadata :: !ArtifactMetadata
    , active :: !Bool
    , tags :: ![Text]
    }
    deriving stock (Eq, Show, Generic)
    deriving anyclass (FromJSON, NFData, ToJSON)

data ArtifactMetadata = ArtifactMetadata
    { note :: !(Maybe Text)
    }
    deriving stock (Eq, Show, Generic)
    deriving anyclass (FromJSON, NFData, ToJSON)

data ArtifactKind = Guide | Reference
    deriving stock (Eq, Show, Generic)
    deriving anyclass (FromJSON, NFData, ToJSON)

data ArtifactLocation
    = LocalFile !Text
    | LocalDir !Text
    | RepoPath !Text
    | LocUrl !Text
    | Canonical
    deriving stock (Eq, Show, Generic)
    deriving anyclass (FromJSON, NFData, ToJSON)

newtype Geometry = Geometry {geometryWkt :: Text}
    deriving stock (Eq, Show, Generic)
    deriving anyclass (FromJSON, NFData, ToJSON)

instance CanonicalTypeName ArtifactInfo where
    canonicalTypeName :: Proxy ArtifactInfo -> Text
    canonicalTypeName _ = "conformance.structural.ArtifactInfo.v1"

instance CanonicalTypeName ArtifactMetadata where
    canonicalTypeName :: Proxy ArtifactMetadata -> Text
    canonicalTypeName _ = "conformance.structural.ArtifactMetadata.v1"

instance CanonicalTypeName ArtifactKind where
    canonicalTypeName :: Proxy ArtifactKind -> Text
    canonicalTypeName _ = "conformance.structural.ArtifactKind.v1"

instance CanonicalTypeName ArtifactLocation where
    canonicalTypeName :: Proxy ArtifactLocation -> Text
    canonicalTypeName _ = "conformance.structural.ArtifactLocation.v1"