Safe Haskell | None |
---|---|
Language | Haskell2010 |
Allows complex filtering on specified fields.
Synopsis
- data FilterKind a
- = AutoFilter a
- | ManualFilter a
- data FilteringParams (params :: [TyNamedFilter])
- type family SupportedFilters ty :: [Type -> Type]
- newtype FilteringSpec (params :: [TyNamedFilter]) = FilteringSpec [SomeFilter params]
- type family FilteringParamTypesOf a :: [TyNamedFilter]
- type FilteringParamsOf a = FilteringParams (FilteringParamTypesOf a)
- type FilteringSpecOf a = FilteringSpec (FilteringParamTypesOf a)
- data FilterMatching a
- = FilterMatching a
- | FilterNotMatching a
- | FilterItemsIn [a]
- data FilterComparing a
- data FilterLike a = FilterLike CaseSensitivity LikePattern
- newtype LikePattern = LikePatternUnsafe {}
- type NumericFilterTypes = [FilterMatching, FilterComparing]
- type TextFilterTypes = [FilterMatching, FilterComparing, FilterLike]
- type DatetimeFilterTypes = '[FilterComparing]
- module Servant.Util.Combinators.Filtering.Construction
General
data FilterKind a Source #
We support two kinds of filters.
AutoFilter a | Automatic filter where different operations are supported (eq, in, cmp). When applied to backend, only filtered value should be supplied. |
ManualFilter a | User-provided value is passed to backend implementation as-is, and filtering on this value should be written manually. |
Instances
data FilteringParams (params :: [TyNamedFilter]) Source #
Servant API combinator which enables filtering on given fields.
If type T
appears with a name name
in params
argument, then query parameters of
name[op]=value
format will be accepted, where op
is a filtering operation
(e.g. equal, not equal, greater) and value
is an item of type T
we filter against.
Multiple filters will form a conjunction.
List of allowed filtering operations depends on type T
and is specified by
SupportedFilters
type family.
Operation argument is optional, when not specified "equality" filter is applied.
Endpoint implementation will receive FilteringSpec
value which contains information
about all filters passed by user. You can later put it to an appropriate function
to apply filtering.
Instances
type family SupportedFilters ty :: [Type -> Type] Source #
For a type of field, get a list of supported filtering operations on this field.
Instances
newtype FilteringSpec (params :: [TyNamedFilter]) Source #
This is what you get in endpoint implementation, it contains all filters
supplied by a user.
Invariant: each filter correspond to some type mentioned in params
.
FilteringSpec [SomeFilter params] |
Instances
IsList (FilteringSpec params) Source # | |
Defined in Servant.Util.Combinators.Filtering.Base type Item (FilteringSpec params) # fromList :: [Item (FilteringSpec params)] -> FilteringSpec params # fromListN :: Int -> [Item (FilteringSpec params)] -> FilteringSpec params # toList :: FilteringSpec params -> [Item (FilteringSpec params)] # | |
Default (FilteringSpec params) Source # | By default |
Defined in Servant.Util.Combinators.Filtering.Construction def :: FilteringSpec params # | |
type Item (FilteringSpec params) Source # | |
Defined in Servant.Util.Combinators.Filtering.Base |
Shortcuts
type family FilteringParamTypesOf a :: [TyNamedFilter] Source #
For a given return type of an endpoint get corresponding filtering params. This mapping is sensible, since we usually allow to filter only on fields appearing in endpoint's response.
Instances
type FilteringParamTypesOf NoContent Source # | |
Defined in Servant.Util.Combinators.Filtering.Base |
type FilteringParamsOf a = FilteringParams (FilteringParamTypesOf a) Source #
This you will most probably want to specify in API.
type FilteringSpecOf a = FilteringSpec (FilteringParamTypesOf a) Source #
This you will most probably want to specify in an endpoint implementation.
Filter types
data FilterMatching a Source #
Support for (==)
, (/=)
and IN list
operations.
Instances
Functor FilterMatching Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.General fmap :: (a -> b) -> FilterMatching a -> FilterMatching b # (<$) :: a -> FilterMatching b -> FilterMatching a # | |
IsAutoFilter FilterMatching Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.General autoFilterEnglishOpsNames :: OpsDescriptions Source # autoFilterParsers :: FromHttpApiData a => Proxy FilterMatching -> Map Text (FilteringValueParser (FilterMatching a)) Source # autoFilterEncode :: ToHttpApiData a => FilterMatching a -> (Text, Text) Source # mapAutoFilterValue :: (a -> b) -> FilterMatching a -> FilterMatching b Source # | |
BuildableAutoFilter FilterMatching Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.General buildAutoFilter :: Buildable a => Text -> FilterMatching a -> Builder Source # |
data FilterComparing a Source #
Support for (<)
, (>)
, (<=)
and (>=)
operations.
Instances
Functor FilterComparing Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.General fmap :: (a -> b) -> FilterComparing a -> FilterComparing b # (<$) :: a -> FilterComparing b -> FilterComparing a # | |
IsAutoFilter FilterComparing Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.General autoFilterEnglishOpsNames :: OpsDescriptions Source # autoFilterParsers :: FromHttpApiData a => Proxy FilterComparing -> Map Text (FilteringValueParser (FilterComparing a)) Source # autoFilterEncode :: ToHttpApiData a => FilterComparing a -> (Text, Text) Source # mapAutoFilterValue :: (a -> b) -> FilterComparing a -> FilterComparing b Source # | |
BuildableAutoFilter FilterComparing Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.General buildAutoFilter :: Buildable a => Text -> FilterComparing a -> Builder Source # |
data FilterLike a Source #
Support for SQL's LIKE syntax.
Instances
Functor FilterLike Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.Like fmap :: (a -> b) -> FilterLike a -> FilterLike b # (<$) :: a -> FilterLike b -> FilterLike a # | |
IsAutoFilter FilterLike Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.Like autoFilterEnglishOpsNames :: OpsDescriptions Source # autoFilterParsers :: FromHttpApiData a => Proxy FilterLike -> Map Text (FilteringValueParser (FilterLike a)) Source # autoFilterEncode :: ToHttpApiData a => FilterLike a -> (Text, Text) Source # mapAutoFilterValue :: (a -> b) -> FilterLike a -> FilterLike b Source # | |
BuildableAutoFilter FilterLike Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.Like buildAutoFilter :: Buildable a => Text -> FilterLike a -> Builder Source # |
newtype LikePattern Source #
Simple regexp pattern, .
and *
signed will be considered.
Escaping is performed via prefixing with backslash.
Instances
IsString LikePattern Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.Like fromString :: String -> LikePattern # | |
Buildable LikePattern Source # | |
Defined in Servant.Util.Combinators.Filtering.Filters.Like build :: LikePattern -> Builder # |
type NumericFilterTypes = [FilterMatching, FilterComparing] Source #
type TextFilterTypes = [FilterMatching, FilterComparing, FilterLike] Source #
type DatetimeFilterTypes = '[FilterComparing] Source #