Skip to content

Commit 548da98

Browse files
committed
Use @jasonzoladz's example
1 parent 651d610 commit 548da98

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

examples/Examples/Data/Argonaut/Record.purs

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,38 @@ module Examples.Data.Argonaut.Record where
22

33
import Prelude
44

5-
import Control.Monad.Eff (Eff)
6-
import Control.Monad.Eff.Console (CONSOLE, logShow)
7-
8-
import Data.Argonaut (class EncodeJson, class DecodeJson, encodeJson, printJson, jsonEmptyObject, decodeJson, (~>), (:=), (.?))
9-
import Data.Maybe (Maybe(..))
10-
11-
newtype Foo = Foo
12-
{ foo :: Maybe Int
13-
, bar :: Maybe String
5+
import Data.Argonaut (class EncodeJson, class DecodeJson, Json, encodeJson, fromArray, decodeJson, jsonEmptyObject, (~>), (:=), (.?))
6+
import Data.Either (Either)
7+
import Data.Traversable (traverse)
8+
9+
newtype BlogPost = BlogPost
10+
{ id :: Int
11+
, title :: String
12+
, categories :: String
13+
, content :: String
1414
}
1515

16-
instance decodeJsonFoo :: DecodeJson Foo where
16+
instance decodeJsonBlogPost :: DecodeJson BlogPost where
1717
decodeJson json = do
1818
obj <- decodeJson json
19-
foo <- obj .? "foo"
20-
bar <- obj .? "bar"
21-
pure $ Foo { foo, bar}
22-
23-
instance encodeJsonFoo :: EncodeJson Foo where
24-
encodeJson (Foo { foo, bar })
25-
= "bar" := bar
26-
~> "foo" := foo
19+
id <- obj .? "id"
20+
title <- obj .? "title"
21+
categories <- obj .? "categories"
22+
content <- obj .? "content"
23+
pure $ BlogPost { id, title, categories, content }
24+
25+
instance encodeJson :: EncodeJson BlogPost where
26+
encodeJson (BlogPost post)
27+
= "id" := post.id
28+
~> "title" := post.title
29+
~> "categories" := post.categories
30+
~> "content" := post.content
2731
~> jsonEmptyObject
2832

29-
instance showFoo :: Show Foo where
30-
show (Foo { foo, bar }) =
31-
"Foo { foo: " <> show foo <> ", bar: " <> show bar <> " }"
32-
33-
main :: Eff (console :: CONSOLE) Unit
34-
main = do
35-
logShow $ "raw foo is: " <> show foo
36-
logShow $ "encoded foo is: " <> printJson (encodeJson foo)
37-
where
38-
foo :: Foo
39-
foo = Foo { foo: Just 42, bar: Nothing }
33+
type BlogPostArray = Array BlogPost
34+
35+
decodeBlogPostArray :: Json -> Either String BlogPostArray
36+
decodeBlogPostArray json = decodeJson json >>= traverse decodeJson
37+
38+
encodeBlogPostArray :: BlogPostArray -> Json
39+
encodeBlogPostArray bpa = fromArray $ encodeJson <$> bpa

0 commit comments

Comments
 (0)