packages feed

mig-extra 0.1.0.1 → 0.1.1.0

raw patch · 6 files changed

+51/−7 lines, 6 filesdep ~migdep ~mig-clientPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: mig, mig-client

API changes (from Hackage documentation)

+ Mig.Extra.Plugin.Trace: withLogs :: MonadIO m => Server m -> Server m
+ Mig.Extra.Plugin.Trace: withLogsBy :: MonadIO m => (Value -> m ()) -> Server m -> Server m
+ Mig.Extra.Server.Common: (:|) :: a -> b -> (:|) a b
+ Mig.Extra.Server.Common: Cookie :: Maybe a -> Cookie a
+ Mig.Extra.Server.Common: Just :: a -> Maybe a
+ Mig.Extra.Server.Common: Nothing :: Maybe a
+ Mig.Extra.Server.Common: OptionalHeader :: Maybe a -> OptionalHeader (sym :: Symbol) a
+ Mig.Extra.Server.Common: SetCookie :: a -> Maybe UTCTime -> Maybe Text -> Maybe Text -> Bool -> Bool -> SetCookie a
+ Mig.Extra.Server.Common: Url :: Path -> [(Text, Text)] -> Map Text Text -> Url
+ Mig.Extra.Server.Common: [$sel:captures:Url] :: Url -> Map Text Text
+ Mig.Extra.Server.Common: [$sel:cookie:SetCookie] :: SetCookie a -> a
+ Mig.Extra.Server.Common: [$sel:domain:SetCookie] :: SetCookie a -> Maybe Text
+ Mig.Extra.Server.Common: [$sel:expires:SetCookie] :: SetCookie a -> Maybe UTCTime
+ Mig.Extra.Server.Common: [$sel:httpOnly:SetCookie] :: SetCookie a -> Bool
+ Mig.Extra.Server.Common: [$sel:path:SetCookie] :: SetCookie a -> Maybe Text
+ Mig.Extra.Server.Common: [$sel:path:Url] :: Url -> Path
+ Mig.Extra.Server.Common: [$sel:queries:Url] :: Url -> [(Text, Text)]
+ Mig.Extra.Server.Common: [$sel:secure:SetCookie] :: SetCookie a -> Bool
+ Mig.Extra.Server.Common: catMaybes :: [Maybe a] -> [a]
+ Mig.Extra.Server.Common: class IsString a
+ Mig.Extra.Server.Common: class ToUrl a
+ Mig.Extra.Server.Common: data Maybe a
+ Mig.Extra.Server.Common: data SetCookie a
+ Mig.Extra.Server.Common: data Url
+ Mig.Extra.Server.Common: data a :| b
+ Mig.Extra.Server.Common: defCookie :: a -> SetCookie a
+ Mig.Extra.Server.Common: fromJust :: HasCallStack => Maybe a -> a
+ Mig.Extra.Server.Common: fromMaybe :: a -> Maybe a -> a
+ Mig.Extra.Server.Common: fromString :: IsString a => String -> a
+ Mig.Extra.Server.Common: isJust :: Maybe a -> Bool
+ Mig.Extra.Server.Common: isNothing :: Maybe a -> Bool
+ Mig.Extra.Server.Common: lines :: String -> [String]
+ Mig.Extra.Server.Common: listToMaybe :: [a] -> Maybe a
+ Mig.Extra.Server.Common: mapMaybe :: (a -> Maybe b) -> [a] -> [b]
+ Mig.Extra.Server.Common: mapUrl :: ToUrl a => (Url -> Url) -> a -> a
+ Mig.Extra.Server.Common: maybe :: b -> (a -> b) -> Maybe a -> b
+ Mig.Extra.Server.Common: maybeToList :: Maybe a -> [a]
+ Mig.Extra.Server.Common: newtype Cookie a
+ Mig.Extra.Server.Common: newtype OptionalHeader (sym :: Symbol) a
+ Mig.Extra.Server.Common: renderUrl :: IsString a => Url -> a
+ Mig.Extra.Server.Common: setCookie :: (ToForm cookie, IsResp resp) => SetCookie cookie -> resp -> resp
+ Mig.Extra.Server.Common: toUrl :: forall (m :: Type -> Type). ToUrl a => Server m -> a
+ Mig.Extra.Server.Common: type String = [Char]
+ Mig.Extra.Server.Common: unlines :: [String] -> String
+ Mig.Extra.Server.Common: unwords :: [String] -> String
+ Mig.Extra.Server.Common: urlArity :: ToUrl a => Int
+ Mig.Extra.Server.Common: words :: String -> [String]
+ Mig.Extra.Server.Html: Link :: Url -> Text -> Link
+ Mig.Extra.Server.Html: [$sel:href:Link] :: Link -> Url
+ Mig.Extra.Server.Html: [$sel:name:Link] :: Link -> Text
+ Mig.Extra.Server.Html: data Link
+ Mig.Extra.Server.Html: instance Data.Aeson.Types.ToJSON.ToJSON Mig.Extra.Server.Html.Link
+ Mig.Extra.Server.Html: instance GHC.Base.Functor Mig.Extra.Server.Html.Resp
+ Mig.Extra.Server.Html: instance GHC.Classes.Eq a => GHC.Classes.Eq (Mig.Extra.Server.Html.Resp a)
+ Mig.Extra.Server.Html: instance GHC.Generics.Generic Mig.Extra.Server.Html.Link
+ Mig.Extra.Server.Html: instance GHC.Show.Show a => GHC.Show.Show (Mig.Extra.Server.Html.Resp a)
+ Mig.Extra.Server.Html: instance Text.Blaze.ToMarkup Mig.Extra.Server.Html.Link
+ Mig.Extra.Server.Html.IO: Link :: Url -> Text -> Link
+ Mig.Extra.Server.Html.IO: [$sel:href:Link] :: Link -> Url
+ Mig.Extra.Server.Html.IO: [$sel:name:Link] :: Link -> Text
+ Mig.Extra.Server.Html.IO: data Link
+ Mig.Extra.Server.Json: instance (GHC.Classes.Eq err, GHC.Classes.Eq a) => GHC.Classes.Eq (Mig.Extra.Server.Json.RespOr err a)
+ Mig.Extra.Server.Json: instance (GHC.Show.Show err, GHC.Show.Show a) => GHC.Show.Show (Mig.Extra.Server.Json.RespOr err a)
+ Mig.Extra.Server.Json: instance GHC.Classes.Eq a => GHC.Classes.Eq (Mig.Extra.Server.Json.Resp a)
+ Mig.Extra.Server.Json: instance GHC.Show.Show a => GHC.Show.Show (Mig.Extra.Server.Json.Resp a)
+ Mig.Extra.Server.Json.IO: (:|) :: a -> b -> (:|) a b
+ Mig.Extra.Server.Json.IO: Cookie :: Maybe a -> Cookie a
+ Mig.Extra.Server.Json.IO: Just :: a -> Maybe a
+ Mig.Extra.Server.Json.IO: Nothing :: Maybe a
+ Mig.Extra.Server.Json.IO: OptionalHeader :: Maybe a -> OptionalHeader (sym :: Symbol) a
+ Mig.Extra.Server.Json.IO: SetCookie :: a -> Maybe UTCTime -> Maybe Text -> Maybe Text -> Bool -> Bool -> SetCookie a
+ Mig.Extra.Server.Json.IO: Url :: Path -> [(Text, Text)] -> Map Text Text -> Url
+ Mig.Extra.Server.Json.IO: [$sel:captures:Url] :: Url -> Map Text Text
+ Mig.Extra.Server.Json.IO: [$sel:cookie:SetCookie] :: SetCookie a -> a
+ Mig.Extra.Server.Json.IO: [$sel:domain:SetCookie] :: SetCookie a -> Maybe Text
+ Mig.Extra.Server.Json.IO: [$sel:expires:SetCookie] :: SetCookie a -> Maybe UTCTime
+ Mig.Extra.Server.Json.IO: [$sel:httpOnly:SetCookie] :: SetCookie a -> Bool
+ Mig.Extra.Server.Json.IO: [$sel:path:SetCookie] :: SetCookie a -> Maybe Text
+ Mig.Extra.Server.Json.IO: [$sel:path:Url] :: Url -> Path
+ Mig.Extra.Server.Json.IO: [$sel:queries:Url] :: Url -> [(Text, Text)]
+ Mig.Extra.Server.Json.IO: [$sel:secure:SetCookie] :: SetCookie a -> Bool
+ Mig.Extra.Server.Json.IO: catMaybes :: [Maybe a] -> [a]
+ Mig.Extra.Server.Json.IO: class IsString a
+ Mig.Extra.Server.Json.IO: class ToUrl a
+ Mig.Extra.Server.Json.IO: data Maybe a
+ Mig.Extra.Server.Json.IO: data SetCookie a
+ Mig.Extra.Server.Json.IO: data Url
+ Mig.Extra.Server.Json.IO: data a :| b
+ Mig.Extra.Server.Json.IO: defCookie :: a -> SetCookie a
+ Mig.Extra.Server.Json.IO: fromJust :: HasCallStack => Maybe a -> a
+ Mig.Extra.Server.Json.IO: fromMaybe :: a -> Maybe a -> a
+ Mig.Extra.Server.Json.IO: fromString :: IsString a => String -> a
+ Mig.Extra.Server.Json.IO: isJust :: Maybe a -> Bool
+ Mig.Extra.Server.Json.IO: isNothing :: Maybe a -> Bool
+ Mig.Extra.Server.Json.IO: lines :: String -> [String]
+ Mig.Extra.Server.Json.IO: listToMaybe :: [a] -> Maybe a
+ Mig.Extra.Server.Json.IO: mapMaybe :: (a -> Maybe b) -> [a] -> [b]
+ Mig.Extra.Server.Json.IO: mapUrl :: ToUrl a => (Url -> Url) -> a -> a
+ Mig.Extra.Server.Json.IO: maybe :: b -> (a -> b) -> Maybe a -> b
+ Mig.Extra.Server.Json.IO: maybeToList :: Maybe a -> [a]
+ Mig.Extra.Server.Json.IO: newtype Cookie a
+ Mig.Extra.Server.Json.IO: newtype OptionalHeader (sym :: Symbol) a
+ Mig.Extra.Server.Json.IO: renderUrl :: IsString a => Url -> a
+ Mig.Extra.Server.Json.IO: setCookie :: (ToForm cookie, IsResp resp) => SetCookie cookie -> resp -> resp
+ Mig.Extra.Server.Json.IO: toUrl :: forall (m :: Type -> Type). ToUrl a => Server m -> a
+ Mig.Extra.Server.Json.IO: type String = [Char]
+ Mig.Extra.Server.Json.IO: unlines :: [String] -> String
+ Mig.Extra.Server.Json.IO: unwords :: [String] -> String
+ Mig.Extra.Server.Json.IO: urlArity :: ToUrl a => Int
+ Mig.Extra.Server.Json.IO: words :: String -> [String]

Files

mig-extra.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack  name:               mig-extra-version:            0.1.0.1+version:            0.1.1.0 synopsis:           Extra utils for Mig core library description:        Extra utils for mig server library category:           Web@@ -62,8 +62,8 @@     , http-api-data     , http-media     , http-types-    , mig >=0.2.0.1-    , mig-client+    , mig >=0.2.1.0+    , mig-client >=0.1.1.0     , openapi3     , template-haskell     , text
src/Mig/Extra/Plugin/Trace.hs view
@@ -16,6 +16,8 @@   logHttpBy,   ppReq,   Verbosity (..),+  withLogs,+  withLogsBy, ) where  import Control.Monad@@ -56,6 +58,12 @@ ifLevel current level vals   | level <= current = vals   | otherwise = []++withLogs :: (MonadIO m) => Server m -> Server m+withLogs = applyPlugin (logHttp V2)++withLogsBy :: (MonadIO m) => (Json.Value -> m ()) -> Server m -> Server m+withLogsBy toLogItem = applyPlugin (logHttpBy toLogItem V2)  ------------------------------------------------------------------------------------- -- through
src/Mig/Extra/Server/Common.hs view
@@ -25,6 +25,9 @@   notImplemented,   redirect,   setHeader,+  setCookie,+  SetCookie (..),+  defCookie,    -- ** methods   Send (..),@@ -38,6 +41,13 @@   HEAD,   TRACE, +  -- ** safe URLs+  UrlOf,+  ToUrl (..),+  Url (..),+  renderUrl,+  (:|) (..),+   -- ** path and query    -- | Build API for routes with queries and captures.@@ -48,6 +58,8 @@   QueryFlag (..),   Optional (..),   Header (..),+  OptionalHeader (..),+  Cookie (..),   PathInfo (..),   FullPathInfo (..),   RawRequest (..),@@ -122,7 +134,9 @@ import Control.Monad.Trans.Class as X import Data.Aeson as X (FromJSON (..), ToJSON (..)) import Data.Default as X+import Data.Maybe as X import Data.OpenApi as X (OpenApi, ToParamSchema (..), ToSchema (..))+import Data.String as X import Data.Text as X (Text) import GHC.Generics as X (Generic) import Mig.Extra.Derive as X
src/Mig/Extra/Server/Html.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE UndecidableInstances #-}  -- | Html servers@@ -16,6 +17,9 @@   Resp (..),   RespOr, +  -- * utils+  Link (..),+   -- * re-exports   Body (..),   module X,@@ -24,11 +28,13 @@ import Mig.Core (Body (..)) import Mig.Core qualified as Core import Mig.Extra.Server.Common as X+import Text.Blaze.Html5 qualified as H+import Text.Blaze.Html5.Attributes qualified as HA  -- response  newtype Resp a = Resp (Core.Resp Html a)-  deriving newtype (IsResp)+  deriving newtype (IsResp, Eq, Show, Functor)  type RespOr err a = Either (Resp err) (Resp a) @@ -40,3 +46,16 @@ type Options m a = Send OPTIONS m (Resp a) type Head m a = Send HEAD m (Resp a) type Trace m a = Send TRACE m (Resp a)++{-| HTML a-links, this type is useful for using+with template engines that rely on @ToJSON@ instance.+Also it can be rendered as Html with @ToMarkup@ instance.+-}+data Link = Link+  { href :: Url+  , name :: Text+  }+  deriving (Generic, ToJSON)++instance ToMarkup Link where+  toMarkup link = H.a H.! HA.href (renderUrl link.href) $ H.text link.name
src/Mig/Extra/Server/Html/IO.hs view
@@ -14,6 +14,9 @@   Resp (..),   RespOr, +  -- * utils+  Link (..),+   -- * re-exports   Body (..),   module X,@@ -21,7 +24,7 @@  import Mig.Core (Body (..)) import Mig.Extra.Server.Common as X-import Mig.Extra.Server.Html (Resp (..), RespOr)+import Mig.Extra.Server.Html (Link (..), Resp (..), RespOr)  type Get a = Send GET IO (Resp a) type Post a = Send POST IO (Resp a)
src/Mig/Extra/Server/Json.hs view
@@ -41,10 +41,10 @@ -- response  newtype Resp a = Resp (Core.Resp Json a)-  deriving newtype (IsResp, Functor)+  deriving newtype (IsResp, Eq, Show, Functor)  newtype RespOr err a = RespOr (Core.RespOr Json err a)-  deriving newtype (IsResp, Functor)+  deriving newtype (IsResp, Eq, Show, Functor)  -- request