summaryrefslogtreecommitdiff
path: root/lib/Properties.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Properties.hs')
-rw-r--r--lib/Properties.hs23
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<>"."