packages feed

servant-pagination 2.5.0 → 2.5.1

raw patch · 4 files changed

+45/−22 lines, 4 filesdep ~servantdep ~servant-serverdep ~textnew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: servant, servant-server, text

API changes (from Hackage documentation)

- Servant.Pagination: type family RangeType resource field :: *;
+ Servant.Pagination: addPageHeaders :: (ToHttpApiData (AcceptRanges fields), KnownSymbol field, HasPagination resource field, IsRangeType (RangeType resource field), PutRange fields field) => Range field (RangeType resource field) -> [resource] -> Headers (PageHeaders fields resource) [resource]
+ Servant.Pagination: type RangeType resource field :: *;

Files

CHANGELOG.md view
@@ -1,5 +1,13 @@ # Changelog +## Unreleased++- Move header logic to a pure addPageHeaders function #21++## v2.5.1 (2023-12-13)++- Bump `servant`, `servant-server`, `text` versions (see [#24](https://github.com/chordify/haskell-servant-pagination/pull/24)).+ ## v2.5.0 (2022-03-09) - Allow text-2.0 and servant-0.19 #20 - Expose PutRange so we can use this in integrations #18@@ -49,21 +57,21 @@ - Allow servant-0.14  -## v2.1.0 (2018-04-16) +## v2.1.0 (2018-04-16)  - Add some tests (QuickCheck round-up & control some Ranges parsing) - Add `Show` and `Eq` instances for Ranges-- Expose `putRange` function +- Expose `putRange` function - Review `getDefaultRange` signature (remove Maybe argument)   ## v2.0.0 (2018-04-06)  - Review internal implementation and public API (ditch Range combinator to favor type-level-  list and more discrete footprint). +  list and more discrete footprint).  - Remove 'Total-Count' header, can still be added on top of the range headers but isn't a Range-  header so to speak. +  header so to speak.  - Extend haddock documentation to be more user-friendly 
servant-pagination.cabal view
@@ -10,7 +10,7 @@     different fashions (pagination with offset / limit, endless scroll using     last referenced resources, ascending and descending ordering, etc.) version:-    2.5.0+    2.5.1 homepage:     https://github.com/chordify/haskell-servant-pagination bug-reports:@@ -83,9 +83,9 @@    build-depends:       base >= 4 && < 5-    , text >= 1.2 && < 2.1-    , servant >= 0.11 && < 0.20-    , servant-server >= 0.11 && < 0.20+    , text >= 1.2 && < 2.2+    , servant >= 0.11 && < 0.21+    , servant-server >= 0.11 && < 0.21     , safe >= 0.3 && < 1     , uri-encode >= 1.5 && < 1.6 
src/Servant/Pagination.hs view
@@ -113,6 +113,7 @@   -- * Use Ranges   , extractRange   , putRange+  , addPageHeaders   , returnRange   , applyRange   ) where@@ -414,10 +415,12 @@       , rangeField  = Proxy @field       } --- | Lift an API response in a 'Monad', typically a 'Servant.Server.Handler'. 'Ranges' headers can be quite cumbersome to--- declare and can be deduced from the resources returned and the previous 'Range'. This is exactly what this function--- does.+-- | Add headers representing a 'Range' to a list of resources. --+-- 'Ranges' headers can be quite cumbersome to declare and can be deduced from a+-- collection of resources together with the 'Range' used to retrieve it, so this function+-- is a shortcut for that.+-- -- @ -- myHandler --  :: 'Maybe' ('Ranges' '["created_at"] Resource)@@ -426,11 +429,10 @@ --  let range = --        'Data.Maybe.fromMaybe' ('getDefaultRange' ('Data.Proxy.Proxy' \@Resource)) (mrange >>= 'extractRange') -----  'returnRange' range ('applyRange' range resources)+--  'return' ('addPageHeaders' range ('applyRange' range resources)) -- @-returnRange-  :: ( Monad m-     , ToHttpApiData (AcceptRanges fields)+addPageHeaders+  :: ( ToHttpApiData (AcceptRanges fields)      , KnownSymbol field      , HasPagination resource field      , IsRangeType (RangeType resource field)@@ -438,15 +440,14 @@      )   => Range field (RangeType resource field)               -- ^ Actual 'Range' used to retrieve the results   -> [resource]                                           -- ^ Resources to return, fetched from a db or a local store-  -> m (Headers (PageHeaders fields resource) [resource]) -- ^ Resources embedded in a given 'Monad' (typically a 'Servant.Server.Handler', with pagination headers)-returnRange Range{..} rs = do+  -> Headers (PageHeaders fields resource) [resource]     -- ^ The same resources, but with pagination headers+addPageHeaders Range{..} rs =   let boundaries = (,)         <$> fmap (getFieldValue rangeField) (Safe.headMay rs)         <*> fmap (getFieldValue rangeField) (Safe.lastMay rs)--  case boundaries of+  in case boundaries of     Nothing ->-      return $ addHeader AcceptRanges $ noHeader $ noHeader rs+      addHeader AcceptRanges $ noHeader $ noHeader rs      Just (start, end) -> do       let nextOffset | rangeValue == Just end = rangeOffset + length rs@@ -469,7 +470,21 @@       let addNextRange | length rs < rangeLimit = noHeader                        | otherwise              = addHeader nextRange -      return $ addHeader AcceptRanges $ addHeader contentRange $ addNextRange rs+      addHeader AcceptRanges $ addHeader contentRange $ addNextRange rs++-- | @'returnRange' range rs = 'return' ('addPageHeaders' range rs)@+returnRange+  :: ( Monad m+     , ToHttpApiData (AcceptRanges fields)+     , KnownSymbol field+     , HasPagination resource field+     , IsRangeType (RangeType resource field)+     , PutRange fields field+     )+  => Range field (RangeType resource field)               -- ^ Actual 'Range' used to retrieve the results+  -> [resource]                                           -- ^ Resources to return, fetched from a db or a local store+  -> m (Headers (PageHeaders fields resource) [resource]) -- ^ Resources embedded in a given 'Monad' (typically a 'Servant.Server.Handler', with pagination headers)+returnRange range rs = return (addPageHeaders range rs)  -- | Default values to apply when parsing a 'Range' data RangeOptions  = RangeOptions
stack.yaml view
@@ -1,4 +1,4 @@-resolver: lts-16.15+resolver: lts-14.25  # Generate files required by Weeder. # See https://github.com/ndmitchell/weeder/issues/53