@@ -2,38 +2,38 @@ module Examples.Data.Argonaut.Record where
22
33import 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