From adb0bc10fc849cad9c56420d1b22c88bc09df05e Mon Sep 17 00:00:00 2001 From: Antoine DAUGUET Date: Fri, 15 Feb 2019 12:09:24 +0100 Subject: [PATCH] Implemented convenience functions for Float query parameters. --- src/Url/Builder.elm | 16 +++++++++++++++- src/Url/Parser/Query.elm | 30 +++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/Url/Builder.elm b/src/Url/Builder.elm index edd8b70..55f4164 100644 --- a/src/Url/Builder.elm +++ b/src/Url/Builder.elm @@ -1,6 +1,6 @@ module Url.Builder exposing ( absolute, relative, crossOrigin, custom, Root(..) - , QueryParameter, string, int, toQuery + , QueryParameter, string, int, float, toQuery ) @@ -194,6 +194,20 @@ int key value = QueryParameter (Url.percentEncode key) (String.fromInt value) +{-| Create a percent-encoded query parameter. + + absolute ["search"] [ float "lat" 48.4428425, float "lng" 1.4812848 ] + -- "/search?lat=48.4428425&lng=1.4812848" + +Writing `float key n` is the same as writing `string key (String.fromFloat n)`. +So this is just a convenience function, making your code a bit shorter! + +-} +float : String -> Float -> QueryParameter +float key value = + QueryParameter (Url.percentEncode key) (String.fromFloat value) + + {-| Convert a list of query parameters to a percent-encoded query. This function is used by `absolute`, `relative`, etc. diff --git a/src/Url/Parser/Query.elm b/src/Url/Parser/Query.elm index 4df6af9..73e5f2a 100644 --- a/src/Url/Parser/Query.elm +++ b/src/Url/Parser/Query.elm @@ -1,5 +1,5 @@ module Url.Parser.Query exposing - ( Parser, string, int, enum, custom + ( Parser, string, int, float, enum, custom , map, map2, map3, map4, map5, map6, map7, map8 ) @@ -96,6 +96,34 @@ int key = Nothing +{-| Handle `Float` parameters. + + + height : Parser (Maybe Float) + height = + float "height" + + -- ?height=2 == Just 2 + -- ?height=17.876 == Just 17.876 + -- ?height=two == Nothing + -- ?sort=date == Nothing + -- ?height=1.2&height=3.19 == Nothing + +Check out [`custom`](#custom) if you need to handle multiple `height` parameters. + +-} +float : String -> Parser (Maybe Float) +float key = + custom key <| + \stringList -> + case stringList of + [ str ] -> + String.toFloat str + + _ -> + Nothing + + {-| Handle enumerated parameters. Maybe you want a true-or-false parameter: import Dict