Skip to content

Commit 3001713

Browse files
committed
wip
1 parent 034de29 commit 3001713

File tree

4 files changed

+55
-43
lines changed

4 files changed

+55
-43
lines changed

pub/functora/src/cfg/Functora/Cfg.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,14 @@ instance
226226
where
227227
toQuery = genericToQuery . unGenericType
228228

229+
instance
230+
( Generic a,
231+
GFromQuery (Rep a)
232+
) =>
233+
FromQuery (GenericType a)
234+
where
235+
fromQuery = fmap GenericType . genericFromQuery
236+
229237
instance
230238
( Generic a,
231239
Typeable a,

pub/functora/src/functora-ghcjs.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ library
189189
Functora.Tags
190190
Functora.Unicode
191191
Functora.Uri
192+
Functora.Uri.FromQuery
192193
Functora.Uri.ToQuery
193194
Functora.Web
194195
Functora.WebOrphan
@@ -258,6 +259,7 @@ test-suite functora-ghcjs-test
258259
Functora.TagsOrphan
259260
Functora.Unicode
260261
Functora.Uri
262+
Functora.Uri.FromQuery
261263
Functora.Uri.ToQuery
262264
Functora.Web
263265
Functora.WebOrphan

pub/functora/src/uri/Functora/Uri/FromQuery.hs

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module Functora.Uri.FromQuery
77
FromQueryField (..),
88
textFromQueryField,
99
readFromQueryField,
10+
FromQueryException (..),
1011
)
1112
where
1213

@@ -20,26 +21,6 @@ import qualified Toml
2021
import Data.JSString (JSString)
2122
#endif
2223

23-
data FromQueryException
24-
= FromQueryMissingField (RText 'QueryKey)
25-
| FromQueryInvalidField (RText 'QueryKey) (RText 'QueryValue)
26-
deriving stock (Eq, Ord, Show, Data, Generic)
27-
28-
instance Exception FromQueryException
29-
30-
type QueryMap = Map (RText 'QueryKey) (RText 'QueryValue)
31-
32-
toQueryMap :: [QueryParam] -> QueryMap
33-
toQueryMap =
34-
foldl
35-
( \acc -> \case
36-
QueryFlag k ->
37-
Map.insert k (either impureThrow id $ mkQueryValue "True") acc
38-
QueryParam k v ->
39-
Map.insert k v acc
40-
)
41-
mempty
42-
4324
class FromQuery a where
4425
fromQuery ::
4526
(MonadThrow m) => [QueryParam] -> m a
@@ -52,7 +33,6 @@ class GFromQuery f where
5233
gFromQuery :: (MonadThrow m) => QueryMap -> m (f p)
5334

5435
genericFromQuery ::
55-
forall a m.
5636
( Generic a,
5737
GFromQuery (Rep a),
5838
MonadThrow m
@@ -82,10 +62,10 @@ instance
8262
. Toml.stripTypeNamePrefix (Proxy @a)
8363
$ selName (error "selName" :: M1 S s (K1 i a) ())
8464
v <-
85-
maybe (throw $ FromQueryMissingField k) pure $
86-
Map.lookup k params
87-
fmap (M1 . K1) $
88-
fromQueryField k v
65+
maybe (throw $ FromQueryMissingField k) pure
66+
$ Map.lookup k params
67+
fmap (M1 . K1)
68+
$ fromQueryField k v
8969

9070
instance (GFromQuery a, GFromQuery b) => GFromQuery (a :*: b) where
9171
gFromQuery params = (:*:) <$> gFromQuery params <*> gFromQuery params
@@ -136,3 +116,27 @@ instance FromQueryField Integer where
136116
instance ToQueryField JSString where
137117
fromQueryField = textFromQueryField
138118
#endif
119+
120+
--
121+
-- Extra stuff
122+
--
123+
124+
data FromQueryException
125+
= FromQueryMissingField (RText 'QueryKey)
126+
| FromQueryInvalidField (RText 'QueryKey) (RText 'QueryValue)
127+
deriving stock (Eq, Ord, Show, Data, Generic)
128+
129+
instance Exception FromQueryException
130+
131+
type QueryMap = Map (RText 'QueryKey) (RText 'QueryValue)
132+
133+
toQueryMap :: [QueryParam] -> QueryMap
134+
toQueryMap =
135+
foldl
136+
( \acc -> \case
137+
QueryFlag k ->
138+
Map.insert k (either impureThrow id $ mkQueryValue "True") acc
139+
QueryParam k v ->
140+
Map.insert k v acc
141+
)
142+
mempty

pub/functora/src/uri/Functora/Uri/ToQuery.hs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,37 +22,35 @@ class (Typeable a) => ToQuery a where
2222
toQuery = genericToQuery
2323

2424
class GToQuery f where
25-
gToQuery :: (String -> String) -> f p -> [QueryParam]
25+
gToQuery :: f p -> [QueryParam]
2626

27-
genericToQuery ::
28-
forall a.
29-
( Generic a,
30-
Typeable a,
31-
GToQuery (Rep a)
32-
) =>
33-
a ->
34-
[QueryParam]
35-
genericToQuery =
36-
gToQuery (Toml.stripTypeNamePrefix $ Proxy @a) . G.from
27+
genericToQuery :: (Generic a, GToQuery (Rep a)) => a -> [QueryParam]
28+
genericToQuery = gToQuery . G.from
3729

3830
instance (GToQuery a) => GToQuery (M1 D c a) where
39-
gToQuery fmt (M1 x) = gToQuery fmt x
31+
gToQuery (M1 x) = gToQuery x
4032

4133
instance (GToQuery a) => GToQuery (M1 C c a) where
42-
gToQuery fmt (M1 x) = gToQuery fmt x
34+
gToQuery (M1 x) = gToQuery x
4335

44-
instance (Selector s, ToQueryField a) => GToQuery (M1 S s (K1 i a)) where
45-
gToQuery fmt m1@(M1 (K1 a)) = do
46-
let name = selName m1
36+
instance
37+
( Typeable a,
38+
Selector s,
39+
ToQueryField a
40+
) =>
41+
GToQuery (M1 S s (K1 i a))
42+
where
43+
gToQuery m1@(M1 (K1 a)) = do
44+
let name = Toml.stripTypeNamePrefix (Proxy @a) $ selName m1
4745
if null name
4846
then mempty
4947
else do
50-
k <- mkQueryKey . pack $ fmt name
48+
k <- mkQueryKey $ pack name
5149
v <- mkQueryValue $ toQueryField a
5250
pure $ QueryParam k v
5351

5452
instance (GToQuery a, GToQuery b) => GToQuery (a :*: b) where
55-
gToQuery fmt (a :*: b) = gToQuery fmt a ++ gToQuery fmt b
53+
gToQuery (a :*: b) = gToQuery a <> gToQuery b
5654

5755
class ToQueryField a where
5856
toQueryField :: a -> Text

0 commit comments

Comments
 (0)