packages feed

keyed-vals-0.2.0.0: src/KeyedVals/Handle.hs

{-# OPTIONS_HADDOCK prune not-home #-}

{- |
Copyright   : (c) 2018-2022 Tim Emiola
SPDX-License-Identifier: BSD3
Maintainer  : Tim Emiola <tim@emio.la>

Declares the abstract @'Handle'@ and combinators used to load and save keyed values.
-}
module KeyedVals.Handle (
  -- * 'Handle' and related types and functions
  Handle (),
  HandleErr (..),
  countKVs,
  loadVal,
  saveVal,
  loadKVs,
  saveKVs,
  updateKVs,
  loadSlice,
  loadFrom,
  saveTo,
  deleteKeys,
  deleteKeysFrom,
  deleteMatches,
  deleteMatchesFrom,
  deleteSelected,
  deleteSelectedFrom,
  close,

  -- * 'Selection' and 'Glob'
  Selection (..),
  Glob,
  mkGlob,
  globPattern,
  isIn,

  -- * aliases used by the 'Handle' functions
  Key,
  Val,
  ValsByKey,
) where

import Data.List.NonEmpty (NonEmpty)
import KeyedVals.Handle.Internal
import Numeric.Natural (Natural)


-- | Loads the saved 'Val' corresponding to a 'Key'.
loadVal :: Handle m -> Key -> m (Either HandleErr (Maybe Val))
loadVal = hLoadVal


-- | Saves a 'Val' for 'Key'.
saveVal :: Handle m -> Key -> Val -> m (Either HandleErr ())
saveVal = hSaveVal


-- | Loads a @'ValsByKey'@.
loadKVs :: Handle m -> Key -> m (Either HandleErr ValsByKey)
loadKVs = hLoadKVs


-- | Saves a @'ValsByKey'@ .
saveKVs :: Handle m -> Key -> ValsByKey -> m (Either HandleErr ())
saveKVs = hSaveKVs


-- | Loads a @'Val'@ from a @'ValsByKey'@.
loadFrom :: Handle m -> Key -> Key -> m (Either HandleErr (Maybe Val))
loadFrom = hLoadFrom


-- | Saves a @'Val'@ in a @'ValsByKey'@.
saveTo :: Handle m -> Key -> Key -> Val -> m (Either HandleErr ())
saveTo = hSaveTo


-- | Loads a @'ValsByKey'@ that only includes @'Val's@ whose keys match a @Selection@.
loadSlice :: Handle m -> Key -> Selection -> m (Either HandleErr ValsByKey)
loadSlice = hLoadSlice


-- | Updates the stored @'ValsByKey'@ from the given @'ValsByKey'@.
updateKVs :: Handle m -> Key -> ValsByKey -> m (Either HandleErr ())
updateKVs = hUpdateKVs


-- | Deletes @'Val's@ stored with the given @'Key's@.
deleteKeys :: Handle m -> NonEmpty Key -> m (Either HandleErr ())
deleteKeys h keys = deleteSelected h $ AllOf keys


-- | Deletes @'Val's@ that match a @'Selection'@.
deleteSelected :: Handle m -> Selection -> m (Either HandleErr ())
deleteSelected = hDeleteSelected


-- | Deletes @'Val's@ whose @Keys@ match a @Glob@.
deleteMatches :: Handle m -> Glob -> m (Either HandleErr ())
deleteMatches h g = deleteSelected h $ Match g


-- | Deletes @'Val's@ for the given @Keys@ from a @'ValsByKey'@.
deleteKeysFrom :: Handle m -> Key -> NonEmpty Key -> m (Either HandleErr ())
deleteKeysFrom h key ks = deleteSelectedFrom h key $ AllOf ks


-- | Deletes @'Val's@ whose @Keys@  match a @Selection@ from a @'ValsByKey'@
deleteSelectedFrom :: Handle m -> Key -> Selection -> m (Either HandleErr ())
deleteSelectedFrom = hDeleteSelectedKVs


-- | Deletes @'Val's@ whose @Keys@  match a @Glob@ from a @'ValsByKey'@
deleteMatchesFrom :: Handle m -> Key -> Glob -> m (Either HandleErr ())
deleteMatchesFrom h key g = deleteSelectedFrom h key $ Match g


-- | Determines the number of @'Val's@ in a @'ValsByKey'@.
countKVs :: Handle m -> Key -> m (Either HandleErr Natural)
countKVs = hCountKVs


close :: Handle m -> m ()
close = hClose