on 4bf4fc3 help sign in
3 files changed+88−22
since splitsnapshots
unifiedsplit
id.cabal+25−4 src/Data/Id.hs+50−17 stack.yaml+13−1
id.cabal+25−4
@@ -5,16 +5,20 @@ version: 0.2.0.0
55license-file: LICENSE
66
77Flag cassava
8− Description: Enable Postgresql support
8+ Description: Enable Cassava support
99 Default: True
1010 Manual: False
1111
12−
1312Flag postgres
1413 Description: Enable Postgresql support
1514 Default: True
1615 Manual: False
1716
17+Flag rel8
18+ Description: Enable Rel8 support
19+ Default: False
20+ Manual: False
21+
1822Flag flat
1923 Description: Enable Flat serialization support
2024 Default: True
@@ -25,6 +29,16 @@ Flag store
2529 Default: False
2630 Manual: False
2731
32+Flag openapi
33+ Description: Enable OpenAPI instances
34+ Default: True
35+ Manual: False
36+
37+Flag lens
38+ Description: Generate lenses
39+ Default: True
40+ Manual: False
41+
2842library
2943 exposed-modules:
3044 Data.Id
@@ -37,8 +51,6 @@ library
3751 deepseq,
3852 hashable,
3953 http-api-data,
40− lens,
41− openapi3,
4254 path-pieces,
4355 text,
4456 QuickCheck,
@@ -47,6 +59,9 @@ library
4759 build-depends:
4860 postgresql-simple
4961 cpp-options: -DUSE_POSTGRES
62+ if flag(rel8) && !impl(ghcjs)
63+ build-depends: rel8
64+ cpp-options: -DUSE_REL8
5065 if flag(cassava) && !impl(ghcjs)
5166 build-depends:
5267 cassava
@@ -59,6 +74,12 @@ library
5974 build-depends:
6075 store,
6176 cpp-options: -DUSE_STORE
77+ if flag(lens)
78+ build-depends: lens
79+ cpp-options: -DUSE_LENS
80+ if flag(openapi)
81+ build-depends: openapi3
82+ cpp-options: -DUSE_OPENAPI
6283
6384 hs-source-dirs:
6485 src
src/Data/Id.hs+50−17
@@ -4,21 +4,29 @@
44{-# OPTIONS_GHC -Wno-orphans #-}
55
66module Data.Id
7− ( Id, mkId, unId, randomId, unsafeIdTagConvert, coerceId, _Id, nilId
8− , IntId, mkIntId, unIntId, unsafeIntIdTagConvert, coerceIntId, _IntId
9− , Name, mkName, unName, unsafeNameTagConvert, coerceName, _Name
7+ ( Id, mkId, unId, randomId, unsafeIdTagConvert, coerceId, nilId
8+ , IntId, mkIntId, unIntId, unsafeIntIdTagConvert, coerceIntId
9+ , Name, mkName, unName, unsafeNameTagConvert, coerceName
10+#ifdef USE_LENS
11+ , _Id, _IntId, _Name
12+#endif
1013 )
1114 where
1215
1316import Control.DeepSeq (NFData)
17+#ifdef USE_LENS
1418import Control.Lens
19+#endif
1520import Control.Monad
1621import Data.Aeson (FromJSON, FromJSONKey, ToJSON, ToJSONKey)
1722import Data.Binary (Binary)
1823import Data.Coerce (coerce)
1924import Data.Data
2025import Data.Hashable (Hashable)
26+import Data.Int (Int64)
27+#ifdef USE_OPENAPI
2128import Data.OpenApi
29+#endif
2230import Data.String
2331import Data.Text as T
2432import Data.UUID (UUID)
@@ -44,6 +52,9 @@ import Flat as F
4452#ifdef USE_STORE
4553import qualified Data.Store
4654#endif
55+#ifdef USE_REL8
56+import Rel8 (DBType(..))
57+#endif
4758
4859newtype Id t = Id { unId :: UUID }
4960 deriving stock Data
@@ -53,14 +64,18 @@ newtype Id t = Id { unId :: UUID }
5364#ifdef USE_POSTGRES
5465 , PG.ToField, PG.FromField
5566#endif
67+#ifdef USE_REL8
68+ , DBType
69+#endif
70+#endif
71+ , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey
72+#ifdef USE_OPENAPI
73+ , ToSchema, ToParamSchema
5674#endif
57− , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey, ToSchema
58− , ToParamSchema, FromHttpApiData, ToHttpApiData )
75+ , FromHttpApiData, ToHttpApiData )
5976
6077type role Id nominal
6178
62−makePrisms ''Id
63−
6479mkId :: forall s. UUID -> Id s
6580mkId = coerce
6681{-# INLINE mkId #-}
@@ -133,7 +148,7 @@ type family Ambiguous (a :: k) :: j where
133148 Ambiguous x = x
134149
135150----------------- IntId
136−newtype IntId t = IntId { unIntId :: Integer }
151+newtype IntId t = IntId Int64
137152 deriving stock Data
138153 deriving newtype
139154 ( Eq, Ord, Binary
@@ -150,19 +165,27 @@ newtype IntId t = IntId { unIntId :: Integer }
150165#ifdef USE_STORE
151166 , Data.Store.Store
152167#endif
168+#ifdef USE_REL8
169+ , DBType
170+#endif
153171#endif
154− , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey, ToSchema
155− , ToParamSchema, FromHttpApiData, ToHttpApiData, PathPiece, Arbitrary
172+ , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey
173+#ifdef USE_OPENAPI
174+ , ToSchema, ToParamSchema
175+#endif
176+ , FromHttpApiData, ToHttpApiData, PathPiece, Arbitrary
156177 , Num, Integral, Real, Enum )
157178
158179type role IntId nominal
159180
160−makePrisms ''IntId
161−
162181mkIntId :: forall s. Integer -> IntId s
163−mkIntId = coerce
182+mkIntId = fromInteger
164183{-# INLINE mkIntId #-}
165184
185+unIntId :: IntId s -> Integer
186+unIntId (IntId i) = fromIntegral i
187+{-# INLINE unIntId #-}
188+
166189instance KnownSymbol s => Show (IntId s) where
167190 show (IntId v) = "IntId-" <> symbolVal (Proxy @s) <> "-" <> show v
168191
@@ -199,15 +222,19 @@ newtype Name t = Name { unName :: Text }
199222#ifdef USE_STORE
200223 , Data.Store.Store
201224#endif
225+#ifdef USE_REL8
226+ , DBType
227+#endif
202228#endif
203− , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey, ToSchema
204− , ToParamSchema, FromHttpApiData, ToHttpApiData, PathPiece
229+ , FromJSON, ToJSON, NFData, Hashable, FromJSONKey, ToJSONKey
230+#ifdef USE_OPENAPI
231+ , ToSchema, ToParamSchema
232+#endif
233+ , FromHttpApiData, ToHttpApiData, PathPiece
205234 , IsString, Semigroup, Monoid )
206235
207236type role Name nominal
208237
209−makePrisms ''Name
210−
211238mkName :: forall s. Text -> Name s
212239mkName = coerce
213240{-# INLINE mkName #-}
@@ -232,3 +259,9 @@ coerceName = coerce
232259{-# INLINE coerceName #-}
233260unsafeNameTagConvert = coerce
234261{-# INLINE unsafeNameTagConvert #-}
262+
263+#ifdef USE_LENS
264+makePrisms ''Id
265+makePrisms ''IntId
266+makePrisms ''Name
267+#endif
stack.yaml+13−1
@@ -1,4 +1,16 @@
1−resolver: lts-18.18
1+resolver: lts-19.31
22
33packages:
44- .
5+
6+nix:
7+ packages: [ postgresql ]
8+
9+flags:
10+ id:
11+ rel8: false
12+ openapi: false
13+ lens: false
14+ cassava: false
15+ flat: false
16+ store: false