diff options
Diffstat (limited to '')
-rw-r--r-- | lib/Properties.hs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/Properties.hs b/lib/Properties.hs index db4908e..592aac4 100644 --- a/lib/Properties.hs +++ b/lib/Properties.hs @@ -297,7 +297,7 @@ checkTileLayerProperty p@(Property name _value) = case name of "playAudioLoop" -> deprecatedUseInstead "audioLoop" "audioVolume" -> do - isBool p + isOrdInRange unwrapFloat 0 1 p requireProperty "playAudio" "openWebsite" -> do uselessEmptyLayer @@ -502,6 +502,12 @@ unwrapInt (Property name value) f = case value of _ -> complain $ "type error: property " <> prettyprint name <> " should be of type int." +unwrapFloat :: Property -> (Float -> LintWriter a) -> LintWriter a +unwrapFloat (Property name value) f = case value of + FloatProp float -> f float + _ -> complain $ "type error: property " <> prettyprint name + <> " should be of type float." + unwrapPath :: Text -> (RelPath -> LintWriter a) -> LintWriter a unwrapPath str f = case parsePath str of OkRelPath p@(Path up _ _) -> do @@ -548,7 +554,16 @@ isString = flip unwrapString (const $ pure ()) isBool :: Property -> LintWriter a isBool = flip unwrapBool (const $ pure ()) -isIntInRange :: Int -> Int -> Property -> LintWriter a -isIntInRange l r p@(Property name _) = unwrapInt p $ \int -> +isIntInRange :: Int -> Int -> Property -> LintWriter b +isIntInRange = isOrdInRange @Int unwrapInt + +isOrdInRange :: (Ord a, Show a) + => (Property -> (a -> LintWriter b) -> LintWriter b) + -> a + -> a + -> Property + -> LintWriter b +isOrdInRange unwrapa l r p@(Property name _) = unwrapa p $ \int -> if l < int && int < r then pure () - else complain $ "Property " <> prettyprint name <> " should be between" <> showText l <> " and " <> showText r<>"." + else complain $ "Property " <> prettyprint name <> " should be between " + <> showText l <> " and " <> showText r<>"." |