{-#LANGUAGE PatternGuards #-} ------------------------------------------------------------------------------- -- | -- Module : Twilio.AuthToken -- Copyright : (C) 2017- Mark Andrus Roberts -- License : BSD-style (see the file LICENSE) -- Maintainer : Mark Andrus Roberts -- Stability : provisional ------------------------------------------------------------------------------- module Twilio.Types.AuthToken ( -- * Authentication Token AuthToken , getAuthToken , parseAuthToken ) where import Control.Monad import Data.Aeson import Data.Char import Data.Text (Text) import qualified Data.Text as T -- | Your authentication token is used to make authenticated REST API requests -- to your Twilio account. newtype AuthToken = AuthToken { getAuthToken' :: Text } deriving (Show, Eq, Ord) -- | Get the 'Text' representation of an 'AuthToken'. getAuthToken :: AuthToken -> Text getAuthToken = getAuthToken' -- | Parse a 'Text' to an 'AuthToken'. parseAuthToken :: Text -> Maybe AuthToken parseAuthToken = parseAuthToken' parseAuthToken' :: MonadPlus m => Text -> m AuthToken parseAuthToken' token | T.length token == 32 , T.all (\x -> isLower x || isNumber x) token = return $ AuthToken token | otherwise = mzero instance FromJSON AuthToken where parseJSON (String v) = parseAuthToken' v parseJSON _ = mzero