module SAML2.Bindings.Internal where

import Control.Applicative ((<|>))
import Data.Proxy (Proxy)
import Data.String (IsString)

import qualified SAML2.Core.Protocols as SAMLP
import SAML2.Bindings.General

lookupProtocolParameter :: (SAMLP.SAMLProtocol m, IsString p) => Proxy m -> (p -> Maybe a) -> Maybe a
lookupProtocolParameter p f =
  case SAMLP.isSAMLResponse_ p of
    Just r -> f (protocolParameter r)
    Nothing -> f (protocolParameter False) <|> f (protocolParameter True)