module Imp.Type.PackageName where

import qualified Control.Monad.Catch as Exception
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Types.PackageName as PackageName
import qualified GHC.Data.FastString as FastString
import qualified GHC.Types.SourceText as SourceText
import qualified Imp.Exception.InvalidPackageName as InvalidPackageName

newtype PackageName
  = PackageName PackageName.PackageName
  deriving (PackageName -> PackageName -> Bool
(PackageName -> PackageName -> Bool)
-> (PackageName -> PackageName -> Bool) -> Eq PackageName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PackageName -> PackageName -> Bool
== :: PackageName -> PackageName -> Bool
$c/= :: PackageName -> PackageName -> Bool
/= :: PackageName -> PackageName -> Bool
Eq, Int -> PackageName -> ShowS
[PackageName] -> ShowS
PackageName -> String
(Int -> PackageName -> ShowS)
-> (PackageName -> String)
-> ([PackageName] -> ShowS)
-> Show PackageName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PackageName -> ShowS
showsPrec :: Int -> PackageName -> ShowS
$cshow :: PackageName -> String
show :: PackageName -> String
$cshowList :: [PackageName] -> ShowS
showList :: [PackageName] -> ShowS
Show)

fromCabal :: PackageName.PackageName -> PackageName
fromCabal :: PackageName -> PackageName
fromCabal = PackageName -> PackageName
PackageName

toCabal :: PackageName -> PackageName.PackageName
toCabal :: PackageName -> PackageName
toCabal (PackageName PackageName
x) = PackageName
x

fromString :: (Exception.MonadThrow m) => String -> m PackageName
fromString :: forall (m :: * -> *). MonadThrow m => String -> m PackageName
fromString String
x =
  m PackageName
-> (PackageName -> m PackageName)
-> Maybe PackageName
-> m PackageName
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (InvalidPackageName -> m PackageName
forall e a. (HasCallStack, Exception e) => e -> m a
forall (m :: * -> *) e a.
(MonadThrow m, HasCallStack, Exception e) =>
e -> m a
Exception.throwM (InvalidPackageName -> m PackageName)
-> InvalidPackageName -> m PackageName
forall a b. (a -> b) -> a -> b
$ String -> InvalidPackageName
InvalidPackageName.new String
x) (PackageName -> m PackageName
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PackageName -> m PackageName)
-> (PackageName -> PackageName) -> PackageName -> m PackageName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageName -> PackageName
fromCabal) (Maybe PackageName -> m PackageName)
-> Maybe PackageName -> m PackageName
forall a b. (a -> b) -> a -> b
$
    String -> Maybe PackageName
forall a. Parsec a => String -> Maybe a
Parsec.simpleParsec String
x

toStringLiteral :: PackageName -> SourceText.StringLiteral
toStringLiteral :: PackageName -> StringLiteral
toStringLiteral PackageName
x =
  SourceText.StringLiteral
    { sl_st :: SourceText
SourceText.sl_st = SourceText
SourceText.NoSourceText,
      sl_fs :: FastString
SourceText.sl_fs = String -> FastString
FastString.mkFastString (String -> FastString)
-> (PackageName -> String) -> PackageName -> FastString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PackageName -> String
PackageName.unPackageName (PackageName -> FastString) -> PackageName -> FastString
forall a b. (a -> b) -> a -> b
$ PackageName -> PackageName
toCabal PackageName
x,
      sl_tc :: Maybe RealSrcSpan
SourceText.sl_tc = Maybe RealSrcSpan
forall a. Maybe a
Nothing
    }