-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | elm-export persistent entities -- -- Ent is a newtype that wraps Persistent Entity's, allowing you to -- export them to Elm types. Specifically, it adds a To/From JSON -- instance which adds an id field, as well as an ElmType instance that -- adds an id field constructor. @package elm-export-persistent @version 0.1.2 -- | Orphan instances needed for SQL keys -- -- This is usually required, but optionally exported in case you have -- your own already module Elm.Export.Persist.BackendKey instance GHC.Generics.Generic (Database.Persist.Class.PersistStore.BackendKey Database.Persist.Sql.Types.Internal.SqlBackend) instance Elm.Type.ElmType (Database.Persist.Class.PersistStore.BackendKey Database.Persist.Sql.Types.Internal.SqlBackend) module Elm.Export.Persist.Ent -- | Entity wrapper that adds ToJSON, FromJSON, and -- ElmType instances -- -- The first type parameter field is a symbol used for the key -- name -- --
-- >>> toElmTypeSource (Proxy :: Proxy (Ent "userId" User))
-- "type alias User = { userName : String, userId : Int }"
--
newtype Ent (field :: Symbol) a
Ent :: (Entity a) -> Ent a
-- | Ent alias, using "id" as the key
--
--
-- >>> toElmTypeSource (Proxy :: Proxy (EntId User))
-- "type alias User = { userName : String, id : Int }"
--
type EntId a = Ent "id" a
instance GHC.Generics.Generic (Elm.Export.Persist.Ent.Ent field a)
instance (GHC.TypeLits.KnownSymbol field, Elm.Type.ElmType a) => Elm.Type.ElmType (Elm.Export.Persist.Ent.Ent field a)
instance (GHC.TypeLits.KnownSymbol field, Data.Aeson.Types.Class.ToJSON a) => Data.Aeson.Types.Class.ToJSON (Elm.Export.Persist.Ent.Ent field a)
instance (Database.Persist.Class.PersistStore.ToBackendKey Database.Persist.Sql.Types.Internal.SqlBackend a, Database.Persist.Class.PersistEntity.PersistEntity a, GHC.TypeLits.KnownSymbol field, Data.Aeson.Types.Class.FromJSON a) => Data.Aeson.Types.Class.FromJSON (Elm.Export.Persist.Ent.Ent field a)
-- | -- newtype Ent (field :: Symbol) a = Ent (Entity a) -- deriving (Generic) -- -- type EntId a = Ent "id" a ---- -- Ent is a newtype that wraps Persistent Entitys, -- allowing you to export them to Elm types. Specifically, it adds a -- {To,From}JSON instance which adds an id field, as well as an -- ElmType instance that adds an id field -- constructor. -- --
-- {-# LANGUAGE FlexibleInstances #-}
-- {-# LANGUAGE GADTs #-}
-- {-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- {-# LANGUAGE MultiParamTypeClasses #-}
-- {-# LANGUAGE OverloadedStrings #-}
-- {-# LANGUAGE QuasiQuotes #-}
-- {-# LANGUAGE TemplateHaskell #-}
-- {-# LANGUAGE TypeFamilies #-}
-- {-# LANGUAGE DeriveGeneric #-}
-- {-# LANGUAGE StandaloneDeriving #-}
--
-- module Main where
--
-- import Data.Aeson
-- import Data.Text
-- import Database.Persist.TH
-- import Elm
-- import GHC.Generics
--
-- import Elm.Export.Persist
-- import Elm.Export.Persist.BackendKey ()
--
-- share [mkPersist sqlSettings, mkMigrate "migrateAccount"] [persistLowerCase|
-- Account
-- email Text
-- password Text
-- deriving Show Generic
-- UniqueEmail email
-- |]
--
-- instance ToJSON Account
-- instance FromJSON Account
-- instance ElmType Account
--
-- -- use GeneralizedNewtypeDeriving for ids
-- -- this picks a simpler int-encoding
-- deriving instance ElmType AccountId
--
--
-- Now let's export it with an id field:
--
-- -- module Main where -- -- import Db -- import Elm -- import Data.Proxy -- -- mkSpecBody :: ElmType a => a -> [Text] -- mkSpecBody a = -- [ toElmTypeSource a -- , toElmDecoderSource a -- , toElmEncoderSource a -- ] -- -- defImports :: [Text] -- defImports = -- [ "import Json.Decode exposing (..)" -- , "import Json.Decode.Pipeline exposing (..)" -- , "import Json.Encode" -- , "import Http" -- , "import String" -- ] -- -- accountSpec :: Spec -- accountSpec = -- Spec ["Generated", "Account"] $ -- defImports ++ mkSpecBody (Proxy :: Proxy (EntId Account)) -- -- main :: IO () -- main = specsToDir [accountSpec] "some/where/output" ---- -- This generates: -- --
-- module Generated.Account exposing (..)
--
-- import Json.Decode exposing (..)
-- import Json.Decode.Pipeline exposing (..)
-- import Json.Encode
-- import Http
-- import String
--
-- type alias Account =
-- { accountEmail : String
-- , accountPassword : String
-- , id : Int
-- }
--
-- decodeAccount : Decoder Account
-- decodeAccount =
-- decode Account
-- |> required "accountEmail" string
-- |> required "accountPassword" string
-- |> required "id" int
--
-- encodeAccount : Account -> Json.Encode.Value
-- encodeAccount x =
-- Json.Encode.object
-- [ ( "accountEmail", Json.Encode.string x.accountEmail )
-- , ( "accountPassword", Json.Encode.string x.accountPassword )
-- , ( "id", Json.Encode.int x.id )
-- ]
--
module Elm.Export.Persist