aur-2.0.4: Linux/Arch/Aur/Pkgbuild.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE ViewPatterns #-}
-- |
-- Module : Linux.Arch.Aur.Pkgbuild
-- Copyright : (c) Colin Woodbury, 2014,2015
-- License : GPL3
-- Maintainer: Colin Woodbury <colingw@gmail.com>
module Linux.Arch.Aur.Pkgbuild
( pkgbuild
, pkgbuild'
, pkgbuildUrl ) where
import Control.Applicative ((<$>))
import Control.Exception (SomeException, catch)
import Control.Lens ((^?))
import Control.Monad ((>=>))
import Control.Monad.Trans (MonadIO, liftIO)
import Data.Monoid ((<>))
import Data.Text hiding (take)
import qualified Data.Text.Lazy as TL
import Data.Text.Lazy.Encoding
import Network.Wreq
import System.FilePath ((</>))
---
type E = SomeException
baseUrl :: String
baseUrl = "https://aur.archlinux.org/packages/"
-- | The location of a given package's PKGBUILD on the AUR servers.
pkgbuildUrl :: String -> String
pkgbuildUrl p = baseUrl </> take 2 p </> p </> "PKGBUILD"
-- | The PKGBUILD of a given package, retrieved from the AUR servers.
pkgbuild :: MonadIO m => String -> m (Maybe Text)
pkgbuild p = e $ (rb >=> txt) <$> get (pkgbuildUrl p)
where rb = (^? responseBody)
txt = Just . TL.toStrict . decodeUtf8
e f = liftIO $ f `catch` (\(_ :: E) -> return Nothing)
-- | Callable with Text as well, if that's easier.
pkgbuild' :: MonadIO m => Text -> m (Maybe Text)
pkgbuild' (unpack -> p) = pkgbuild p