@@ -4,21 +4,29 @@
4{-# OPTIONS_GHC -Wno-orphans #-}
4{-# OPTIONS_GHC -Wno-orphans #-}
6module Data.Id
6module Data.Id
7− ( Id, mkId, unId, randomId, unsafeIdTagConvert, coerceId, _Id, nilId
7+ ( Id, mkId, unId, randomId, unsafeIdTagConvert, coerceId, nilId
8− , IntId, mkIntId, unIntId, unsafeIntIdTagConvert, coerceIntId, _IntId
8+ , IntId, mkIntId, unIntId, unsafeIntIdTagConvert, coerceIntId
9− , Name, mkName, unName, unsafeNameTagConvert, coerceName, _Name
9+ , Name, mkName, unName, unsafeNameTagConvert, coerceName
13import Control.DeepSeq (NFData)
16import Control.DeepSeq (NFData)
14import Control.Lens
18import Control.Lens
15import Control.Monad
20import Control.Monad
16import Data.Aeson (FromJSON, FromJSONKey, ToJSON, ToJSONKey)
21import Data.Aeson (FromJSON, FromJSONKey, ToJSON, ToJSONKey)
17import Data.Binary (Binary)
22import Data.Binary (Binary)
18import Data.Coerce (coerce)
23import Data.Coerce (coerce)
19import Data.Data
24import Data.Data
20import Data.Hashable (Hashable)
25import Data.Hashable (Hashable)
26+import Data.Int (Int64)
21import Data.OpenApi
28import Data.OpenApi
22import Data.String
30import Data.String
23import Data.Text as T
31import Data.Text as T
24import Data.UUID (UUID)
32import Data.UUID (UUID)
@@ -44,6 +52,9 @@ import Flat as F
44#ifdef USE_STORE
52#ifdef USE_STORE
45import qualified Data.Store
53import qualified Data.Store
56+import Rel8 (DBType(..))
48newtype Id t = Id { unId :: UUID }
59newtype Id t = Id { unId :: UUID }
49 deriving stock Data
60 deriving stock Data
@@ -53,14 +64,18 @@ newtype Id t = Id { unId :: UUID }
53#ifdef USE_POSTGRES
64#ifdef USE_POSTGRES
54 , PG.ToField, PG.FromField
65 , PG.ToField, PG.FromField
71+ , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey
73+ , ToSchema, ToParamSchema
57− , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey, ToSchema
58− , ToParamSchema, FromHttpApiData, ToHttpApiData )
75+ , FromHttpApiData, ToHttpApiData )
60type role Id nominal
77type role Id nominal
64mkId :: forall s. UUID -> Id s
79mkId :: forall s. UUID -> Id s
65mkId = coerce
80mkId = coerce
66{-# INLINE mkId #-}
81{-# INLINE mkId #-}
@@ -133,7 +148,7 @@ type family Ambiguous (a :: k) :: j where
133 Ambiguous x = x
148 Ambiguous x = x
135----------------- IntId
150----------------- IntId
136−newtype IntId t = IntId { unIntId :: Integer }
151+newtype IntId t = IntId { unIntId :: Int64 }
137 deriving stock Data
152 deriving stock Data
138 deriving newtype
153 deriving newtype
139 ( Eq, Ord, Binary
154 ( Eq, Ord, Binary
@@ -150,17 +165,21 @@ newtype IntId t = IntId { unIntId :: Integer }
150#ifdef USE_STORE
165#ifdef USE_STORE
151 , Data.Store.Store
166 , Data.Store.Store
154− , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey, ToSchema
172+ , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey
174+ , ToSchema, ToParamSchema
155− , ToParamSchema, FromHttpApiData, ToHttpApiData, PathPiece, Arbitrary
176+ , FromHttpApiData, ToHttpApiData, PathPiece, Arbitrary
156 , Num, Integral, Real, Enum )
177 , Num, Integral, Real, Enum )
158type role IntId nominal
179type role IntId nominal
162mkIntId :: forall s. Integer -> IntId s
181mkIntId :: forall s. Integer -> IntId s
163−mkIntId = coerce
182+mkIntId = fromInteger
164{-# INLINE mkIntId #-}
183{-# INLINE mkIntId #-}
166instance KnownSymbol s => Show (IntId s) where
185instance KnownSymbol s => Show (IntId s) where
@@ -199,15 +218,19 @@ newtype Name t = Name { unName :: Text }
199#ifdef USE_STORE
218#ifdef USE_STORE
200 , Data.Store.Store
219 , Data.Store.Store
225+ , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey
227+ , ToSchema, ToParamSchema
203− , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey, ToSchema
204− , ToParamSchema, FromHttpApiData, ToHttpApiData, PathPiece
229+ , FromHttpApiData, ToHttpApiData, PathPiece
205 , IsString, Semigroup, Monoid )
230 , IsString, Semigroup, Monoid )
207type role Name nominal
232type role Name nominal
211mkName :: forall s. Text -> Name s
234mkName :: forall s. Text -> Name s
212mkName = coerce
235mkName = coerce
213{-# INLINE mkName #-}
236{-# INLINE mkName #-}
@@ -232,3 +255,9 @@ coerceName = coerce
232{-# INLINE coerceName #-}
255{-# INLINE coerceName #-}
233unsafeNameTagConvert = coerce
256unsafeNameTagConvert = coerce
234{-# INLINE unsafeNameTagConvert #-}
257{-# INLINE unsafeNameTagConvert #-}