{-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_HADDOCK prune not-home #-} {- | Module : Test.KeyedVals.CheckHandle Copyright : (c) 2022 Tim Emiola Maintainer : Tim Emiola SPDX-License-Identifier: BSD3 -} module Test.KeyedVals.Prelude ( -- * functions orThrowHandleErr, throwHandleErr, withGlobOf, -- * module re-eports module Control.Monad, module Control.Exception, module Data.ByteString, module Data.List.NonEmpty, module Numeric.Natural, module KeyedVals.Handle, module Test.Hspec, module Test.Hspec.Benri, module Test.KeyedVals.Types, ) where import Control.Exception (throwIO) import Control.Monad (void) import Data.ByteString (ByteString) import Data.List.NonEmpty (NonEmpty (..)) import KeyedVals.Handle (Glob, Handle, HandleErr, Key, close, mkGlob) import Numeric.Natural (Natural) import Test.Hspec import Test.Hspec.Benri import Test.KeyedVals.Types withGlobOf :: ByteString -> (Glob -> IO a) -> IO a withGlobOf x action = do case mkGlob x of Nothing -> throwIO $ userError "bad test pattern" Just g -> action g throwHandleErr :: HandleErr -> IO () throwHandleErr = throwIO . userError . show orThrowHandleErr :: IO (Either HandleErr ()) -> IO () orThrowHandleErr action = action >>= either throwHandleErr pure