Skip to content

Commit 1eeb40b

Browse files
committed
Merge branch 'add-spread-queries-#57' into add-variables-to-codegen-#55
2 parents 3e0637d + de98d8d commit 1eeb40b

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

Diff for: src/GraphQL/Client/Alias/Dynamic.purs

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
module GraphQL.Client.Alias.Dynamic where
22

33
import Prelude
4-
54
import Data.Argonaut.Core (Json)
5+
import Data.Argonaut.Core as Argonaut
66
import Data.Argonaut.Decode (class DecodeJson, JsonDecodeError, decodeJson)
77
import Data.Argonaut.Decode.Decoders (decodeJObject)
8+
import Data.Argonaut.Encode (class EncodeJson, encodeJson)
9+
import Data.Array (mapWithIndex)
810
import Data.Array as Array
911
import Data.Either (Either)
1012
import Data.Generic.Rep (class Generic)
11-
import Data.Newtype (class Newtype)
13+
import Data.Newtype (class Newtype, unwrap)
1214
import Data.Show.Generic (genericShow)
1315
import Data.Traversable (traverse)
16+
import Data.Tuple (Tuple(..))
17+
import Foreign.Object as Object
1418
import GraphQL.Hasura.Decode (class DecodeHasura, decodeHasura)
19+
import GraphQL.Hasura.Encode (class EncodeHasura, encodeHasura)
1520

1621
-- | Used for creating spread aliases dynamically
1722
-- | eq:
@@ -26,6 +31,7 @@ data Spread alias args fields
2631
= Spread alias (Array args) fields
2732

2833
-- | The return type of a query made with a dynamic alias spread
34+
-- | This type has
2935
newtype SpreadRes a
3036
= SpreadRes (Array a)
3137

@@ -37,7 +43,7 @@ derive instance eqSpreadRes :: Eq a => Eq (SpreadRes a)
3743

3844
derive instance ordSpreadRes :: Ord a => Ord (SpreadRes a)
3945

40-
instance showSpreadRes :: Show a => Show (SpreadRes a) where
46+
instance showSpreadRes :: Show a => Show (SpreadRes a) where
4147
show = genericShow
4248

4349
decodeSpreadRes :: forall a. (Json -> Either JsonDecodeError a) -> Json -> Either JsonDecodeError (SpreadRes a)
@@ -48,3 +54,16 @@ instance decodeHasuraSpreadRes :: DecodeHasura a => DecodeHasura (SpreadRes a) w
4854

4955
instance decodeJsonSpreadRes :: DecodeJson a => DecodeJson (SpreadRes a) where
5056
decodeJson = decodeSpreadRes decodeJson
57+
58+
encodeSpreadRes :: forall a. (a -> Json) -> (SpreadRes a) -> Json
59+
encodeSpreadRes encoder =
60+
unwrap
61+
>>> mapWithIndex (\idx a -> Tuple ("_" <> show idx) (encoder a))
62+
>>> Object.fromFoldable
63+
>>> Argonaut.fromObject
64+
65+
instance encodeHasuraSpreadRes :: EncodeHasura a => EncodeHasura (SpreadRes a) where
66+
encodeHasura = encodeSpreadRes encodeHasura
67+
68+
instance encodeJsonSpreadRes :: EncodeJson a => EncodeJson (SpreadRes a) where
69+
encodeJson = encodeSpreadRes encodeJson

0 commit comments

Comments
 (0)