module Polysemy.Hasql.Data.ConnectionTag where

import Exon (ToSegment (toSegment))

data ConnectionTag =
  GlobalTag
  |
  NamedTag Text
  |
  SerialTag Integer
  deriving stock (ConnectionTag -> ConnectionTag -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConnectionTag -> ConnectionTag -> Bool
$c/= :: ConnectionTag -> ConnectionTag -> Bool
== :: ConnectionTag -> ConnectionTag -> Bool
$c== :: ConnectionTag -> ConnectionTag -> Bool
Eq, Int -> ConnectionTag -> ShowS
[ConnectionTag] -> ShowS
ConnectionTag -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConnectionTag] -> ShowS
$cshowList :: [ConnectionTag] -> ShowS
show :: ConnectionTag -> String
$cshow :: ConnectionTag -> String
showsPrec :: Int -> ConnectionTag -> ShowS
$cshowsPrec :: Int -> ConnectionTag -> ShowS
Show, Eq ConnectionTag
ConnectionTag -> ConnectionTag -> Bool
ConnectionTag -> ConnectionTag -> Ordering
ConnectionTag -> ConnectionTag -> ConnectionTag
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ConnectionTag -> ConnectionTag -> ConnectionTag
$cmin :: ConnectionTag -> ConnectionTag -> ConnectionTag
max :: ConnectionTag -> ConnectionTag -> ConnectionTag
$cmax :: ConnectionTag -> ConnectionTag -> ConnectionTag
>= :: ConnectionTag -> ConnectionTag -> Bool
$c>= :: ConnectionTag -> ConnectionTag -> Bool
> :: ConnectionTag -> ConnectionTag -> Bool
$c> :: ConnectionTag -> ConnectionTag -> Bool
<= :: ConnectionTag -> ConnectionTag -> Bool
$c<= :: ConnectionTag -> ConnectionTag -> Bool
< :: ConnectionTag -> ConnectionTag -> Bool
$c< :: ConnectionTag -> ConnectionTag -> Bool
compare :: ConnectionTag -> ConnectionTag -> Ordering
$ccompare :: ConnectionTag -> ConnectionTag -> Ordering
Ord, forall x. Rep ConnectionTag x -> ConnectionTag
forall x. ConnectionTag -> Rep ConnectionTag x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep ConnectionTag x -> ConnectionTag
$cfrom :: forall x. ConnectionTag -> Rep ConnectionTag x
Generic)

instance IsString ConnectionTag where
  fromString :: String -> ConnectionTag
fromString =
    Text -> ConnectionTag
NamedTag forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. IsString a => String -> a
fromString

instance (
    IsString a
  ) => ToSegment ConnectionTag a where
    toSegment :: ConnectionTag -> a
toSegment = \case
      ConnectionTag
GlobalTag -> a
"global"
      NamedTag Text
n -> forall a. IsString a => Text -> a
fromText Text
n
      SerialTag Integer
n -> forall b a. (Show a, IsString b) => a -> b
show Integer
n