servant-auth-token-0.4.7.0: src/Servant/Server/Auth/Token/Patch.hs
{-|
Module : Servant.Server.Auth.Token.Patch
Description : Helpers for patching entities
Copyright : (c) Anton Gushcha, 2016
License : MIT
Maintainer : ncrashed@gmail.com
Stability : experimental
Portability : Portable
-}
module Servant.Server.Auth.Token.Patch(
withPatch
, withPatch'
, withNullPatch
, withNullPatch'
) where
-- | Helper for implementation of 'HasPatch'
withPatch :: Monad m => Maybe a -> (a -> b -> m b) -> b -> m b
withPatch v f b = case v of
Nothing -> return b
Just a -> f a b
{-# INLINE withPatch #-}
-- | Helper for implementation of 'HasPatch'
withPatch' :: Maybe a -> (a -> b -> b) -> b -> b
withPatch' v f b = case v of
Nothing -> b
Just a -> f a b
{-# INLINE withPatch' #-}
-- | Helper to implement patch with nullable flag
withNullPatch :: Monad m
=> Maybe Bool -- ^ If this is 'Just true' then execute following updater
-> (b -> m b) -- ^ Updater when previous value is 'Just true'
-> Maybe a -- ^ If the value is 'Just' and the first parameter is 'Nothing' then execute following updater
-> (a -> b -> m b) -- ^ Main updater
-> b -> m b
withNullPatch mnull nullify ma updater b = case mnull of
Just True -> nullify b
_ -> withPatch ma updater b
{-# INLINE withNullPatch #-}
-- | Helper to implement patch with nullable flag
withNullPatch' :: Maybe Bool -- ^ If this is 'Just true' then execute following updater
-> (b -> b) -- ^ Updater when previous value is 'Just true'
-> Maybe a -- ^ If the value is 'Just' and the first parameter is 'Nothing' then execute following updater
-> (a -> b -> b) -- ^ Main updater
-> b -> b
withNullPatch' mnull nullify ma updater b = case mnull of
Just True -> nullify b
_ -> withPatch' ma updater b
{-# INLINE withNullPatch' #-}