module Data.Salak.Operation where import Data.Salak.Types import Data.Text (Text, unpack) -- | Find `Properties` by key and convert to specific Haskell value. -- -- @since 0.2.1 infixl 5 .?> (.?>) :: FromProperties a => Properties -> Text -> Return a (.?>) = flip Data.Salak.Types.lookup -- | Get property or use default value if not found, but will throw -- exception if parse failed. -- -- @since 0.2.1 infixl 5 .|= (.|=) :: Return a -> a -> a (.|=) (Right a) _ = a (.|=) (Left (Fail e)) _ = error e (.|=) _ d = d -- | Use default value if Key not found -- -- @since 0.2.1 infixl 5 .?= (.?=) :: Return a -> a -> Return a (.?=) a b = Right (a .|= b) -- | Find `Properties` by key and convert to specific Haskell value. -- Throw error if property not found or parse failed -- -- @since 0.2.1 infixl 5 .>> (.>>) :: FromProperties a => Properties -> Text -> a (.>>) p key = case p .?> key of Right v -> v Left (EmptyKey k) -> error $ "property " ++ unpack k ++ " not set" Left (Fail e) -> error e