{- | Copyright: (c) 2015-2019 Aelve (c) 2019-2020 Kowainik SPDX-License-Identifier: MPL-2.0 Maintainer: Kowainik -} module ShortcutLinks ( Result(..) , Shortcut , allShortcuts , useShortcut , useShortcutFrom ) where import Data.Text (Text) import ShortcutLinks.All (Result (..), Shortcut, allShortcuts) import ShortcutLinks.Utils (format) {- | Use a shortcut from 'allShortcuts'. This is the main function you should use. -} useShortcut :: Text -- ^ Shortcut name -> Maybe Text -- ^ Option -> Text -- ^ Link text -> Result Text -- ^ Resulting URL useShortcut = useShortcutFrom allShortcuts {- | Use a shortcut from a list. For instance, if you want to add @hk@ as a synonym for @hackage@, you'd write: >>> useShortcutFrom ((["hk"], hackage) : allShortcuts) -} useShortcutFrom :: [([Text], Shortcut)] -> Text -- ^ Shortcut name -> Maybe Text -- ^ Option -> Text -- ^ Link text -> Result Text -- ^ Resulting URL useShortcutFrom shortcuts name option link = case filter givenShortcut shortcuts of [] -> fail (format "there's no shortcut named '{}'" name) [sh] -> snd sh option link _ -> fail (format "there's more than one shortcut named '{}'" name) where givenShortcut :: ([Text], Shortcut) -> Bool givenShortcut (names, _) = name `elem` names