diff --git a/example/packages.dhall b/example/packages.dhall index fd112c2f..1a26dba2 100644 --- a/example/packages.dhall +++ b/example/packages.dhall @@ -17,6 +17,11 @@ let additions = "https://github.com/coot/purescript-argonaut-aeson-generic.git" , version = "v0.4.1" } + , argonaut-codecs = + { dependencies = [ "console" ] + , repo = "https://github.com/peterbecich/purescript-argonaut-codecs.git" + , version = "04abb3eb24a4deafe125be0eb23e2786c642e66b" + } , foreign-generic = { dependencies = [ "effect" diff --git a/example/src/Main.purs b/example/src/Main.purs index fb5095d6..d951ba8e 100644 --- a/example/src/Main.purs +++ b/example/src/Main.purs @@ -18,16 +18,27 @@ import Effect.Aff (launchAff_) import Affjax.Web (get, post_) import Affjax.ResponseFormat (json) import Affjax.RequestBody as RequestBody -import Types (Foo, fooMessage, fooNumber, fooList) +import Foreign.Object (empty) +import Types (Foo, FEither(..), fooMessage, fooNumber, fooList) import Data.Argonaut.Decode.Error (JsonDecodeError) import Data.Argonaut.Decode.Generic (genericDecodeJson) import Data.Argonaut.Encode.Generic (genericEncodeJson) -import Types (Foo, fooMessage, fooNumber, fooList, fooMap) --- import Types (Foo, fooMessage, fooNumber, fooList, fooMap, fooTestSum, fooTestData) +import Types (Baz(Baz), Foo(Foo), TestData(..), TestSum(..), fooMessage, fooNumber, fooList, fooMap, fooTestSum, fooTestData) import Data.Map as Map import Foreign.Object as Object +testFoo = Foo + { _fooMessage: "foo" + , _fooE: FEither (Left "foo") + , _fooNumber: 1 + , _fooList: [1,2,3] + , _fooMap: empty + , _fooBaz: Baz { _bazMessage: "baz" } + , _fooTestSum: Nullary + , _fooTestData: TEither "foo" + } + main :: Effect Unit main = log "Hello, Purescript!" *> launchAff_ do -- "Foo" tests untagged JSON, i.e.: diff --git a/example/src/Types.hs b/example/src/Types.hs index 89b8fc72..4dc69463 100644 --- a/example/src/Types.hs +++ b/example/src/Types.hs @@ -10,7 +10,7 @@ module Types where import Control.Lens.TH (makeLenses) -import Data.Aeson (FromJSON, ToJSON(toEncoding), defaultOptions, tagSingleConstructors, genericToEncoding, unwrapUnaryRecords) +import Data.Aeson (FromJSON, ToJSON(toEncoding), SumEncoding(..), defaultOptions, tagSingleConstructors, genericToEncoding, unwrapUnaryRecords, sumEncoding, defaultTaggedObject) import qualified Data.Map.Lazy as Map import Data.Proxy import Data.Text @@ -26,7 +26,17 @@ import Test.QuickCheck (Arbitrary (..), chooseEnum, oneof, resize, data Baz = Baz { _bazMessage :: Text } - deriving (FromJSON, Generic, ToJSON, Show) + deriving (FromJSON, Generic, Show) + +instance ToJSON Baz where + toEncoding = genericToEncoding + ( + defaultOptions + { tagSingleConstructors = True + , unwrapUnaryRecords = True + } + ) + makeLenses ''Baz @@ -62,6 +72,7 @@ instance Arbitrary TestData where TEither <$> arbitrary ] + data Foo = Foo { _fooMessage :: Text , _fooE :: Either Text Int @@ -75,17 +86,24 @@ data Foo = Foo deriving (FromJSON, Generic, Show, ToJSON) + instance {-# OVERLAPPING #-} ToJSON (Either Text Int) where - toEncoding = genericToEncoding (defaultOptions { tagSingleConstructors = True, unwrapUnaryRecords = True }) + toEncoding = genericToEncoding + ( + defaultOptions + { tagSingleConstructors = True + , unwrapUnaryRecords = True + -- , sumEncoding = TaggedObject "foo" "bar" -- defaultTaggedObject { contentsFieldName = "value" } + } + ) --- instance ToJSON Foo where --- toEncoding = genericToEncoding (defaultOptions { tagSingleConstructors = True, unwrapUnaryRecords = True }) +instance {-# OVERLAPPING #-} FromJSON (Either Text Int) makeLenses ''Foo -- TODO newtype data Bar a = Bar a - deriving (FromJSON, Generic, Show, ToJSON, Typeable) + deriving (FromJSON, Generic, Show, Typeable, ToJSON) makeLenses ''Bar