stan-0.0.0.0: src/Stan/Inspection/All.hs
{- |
Copyright: (c) 2020 Kowainik
SPDX-License-Identifier: MPL-2.0
Maintainer: Kowainik <xrom.xkov@gmail.com>
Contains lists of all 'Inspection's and 'Inspection' 'Id's provided by @Stan@.
-}
module Stan.Inspection.All
( inspectionsMap
, inspections
, inspectionsIds
-- * Stan inspections search
, lookupInspectionById
, getInspectionById
) where
import Stan.Core.Id (Id (..))
import Stan.Inspection (Inspection (..), InspectionsMap)
import Stan.Inspection.AntiPattern (antiPatternInspectionsMap)
import Stan.Inspection.Infinite (infiniteInspectionsMap)
import Stan.Inspection.Partial (partialInspectionsMap)
import Stan.Inspection.Style (styleInspectionsMap)
import qualified Data.HashMap.Strict as HM
-- | All 'Inspection's map from 'Id's.
inspectionsMap :: InspectionsMap
inspectionsMap =
partialInspectionsMap
<> infiniteInspectionsMap
<> antiPatternInspectionsMap
<> styleInspectionsMap
{- | List of all inspections.
-}
inspections :: [Inspection]
inspections = sortWith inspectionId $ HM.elems inspectionsMap
-- | Set of all inspection 'Id's.
inspectionsIds :: HashSet (Id Inspection)
inspectionsIds = HM.keysSet inspectionsMap
-- | Look up 'Inspection' by the given inspection 'Id'.
lookupInspectionById :: Id Inspection -> Maybe Inspection
lookupInspectionById insId = HM.lookup insId inspectionsMap
{-# INLINE lookupInspectionById #-}
-- | Get the 'Inspection' by the given known inspection 'Id'.
getInspectionById :: Id Inspection -> Inspection
getInspectionById insId = case lookupInspectionById insId of
Just ins -> ins
Nothing -> error $ "Unknown Inspection ID: " <> unId insId