-- 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) -- |

Usage

-- -- --
--   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. -- --

Example

-- -- -- Let's define a Persistent model: -- --
--   {-# 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