packages feed

baikai-kit-0.4.0.0: src/Baikai/Kit/Visibility.hs

-- | Visibility is independent of user/project scope.
module Baikai.Kit.Visibility
  ( KitVisibility (..),
    VisibilitySource (..),
    visibilityLabel,
    parseVisibility,
  )
where

import Baikai.Prelude
import Data.Aeson (withText)
import Data.Text qualified as Text

data KitVisibility = ToolOnlyVisibility | SharedVisibility
  deriving stock (Eq, Ord, Show, Enum, Bounded)

data VisibilitySource = FromManifest | FromInstallFlag
  deriving stock (Eq, Show)

visibilityLabel :: KitVisibility -> Text
visibilityLabel ToolOnlyVisibility = "tool-only"
visibilityLabel SharedVisibility = "shared"

parseVisibility :: Text -> Either Text KitVisibility
parseVisibility "tool-only" = Right ToolOnlyVisibility
parseVisibility "shared" = Right SharedVisibility
parseVisibility other = Left ("unknown visibility '" <> other <> "'; expected tool-only or shared")

instance FromJSON KitVisibility where
  parseJSON = withText "KitVisibility" (either (fail . Text.unpack) pure . parseVisibility)