{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
-- |
-- Protocol Bindings identifiers
--
-- <https://docs.oasis-open.org/security/saml/v2.0/saml-bindings-2.0-os.pdf saml-bindings-2.0-os> §3.X.1
module SAML2.Bindings.Identifiers where

import SAML2.XML
import SAML2.Core.Namespaces
import SAML2.Core.Versioning

data Binding
  = BindingSOAP -- ^§3.2
  | BindingPAOS -- ^§3.3
  | BindingHTTPRedirect -- ^§3.4
  | BindingHTTPPOST -- ^§3.5
  | BindingHTTPArtifact -- ^§3.6
  | BindingURI -- ^§3.7
  deriving (Binding -> Binding -> Bool
(Binding -> Binding -> Bool)
-> (Binding -> Binding -> Bool) -> Eq Binding
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Binding -> Binding -> Bool
$c/= :: Binding -> Binding -> Bool
== :: Binding -> Binding -> Bool
$c== :: Binding -> Binding -> Bool
Eq, Binding
Binding -> Binding -> Bounded Binding
forall a. a -> a -> Bounded a
maxBound :: Binding
$cmaxBound :: Binding
minBound :: Binding
$cminBound :: Binding
Bounded, Int -> Binding
Binding -> Int
Binding -> [Binding]
Binding -> Binding
Binding -> Binding -> [Binding]
Binding -> Binding -> Binding -> [Binding]
(Binding -> Binding)
-> (Binding -> Binding)
-> (Int -> Binding)
-> (Binding -> Int)
-> (Binding -> [Binding])
-> (Binding -> Binding -> [Binding])
-> (Binding -> Binding -> [Binding])
-> (Binding -> Binding -> Binding -> [Binding])
-> Enum Binding
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: Binding -> Binding -> Binding -> [Binding]
$cenumFromThenTo :: Binding -> Binding -> Binding -> [Binding]
enumFromTo :: Binding -> Binding -> [Binding]
$cenumFromTo :: Binding -> Binding -> [Binding]
enumFromThen :: Binding -> Binding -> [Binding]
$cenumFromThen :: Binding -> Binding -> [Binding]
enumFrom :: Binding -> [Binding]
$cenumFrom :: Binding -> [Binding]
fromEnum :: Binding -> Int
$cfromEnum :: Binding -> Int
toEnum :: Int -> Binding
$ctoEnum :: Int -> Binding
pred :: Binding -> Binding
$cpred :: Binding -> Binding
succ :: Binding -> Binding
$csucc :: Binding -> Binding
Enum, Int -> Binding -> ShowS
[Binding] -> ShowS
Binding -> String
(Int -> Binding -> ShowS)
-> (Binding -> String) -> ([Binding] -> ShowS) -> Show Binding
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Binding] -> ShowS
$cshowList :: [Binding] -> ShowS
show :: Binding -> String
$cshow :: Binding -> String
showsPrec :: Int -> Binding -> ShowS
$cshowsPrec :: Int -> Binding -> ShowS
Show)

instance Identifiable URI Binding where
  identifier :: Binding -> URI
identifier = String -> (SAMLVersion, String) -> URI
samlURNIdentifier String
"bindings" ((SAMLVersion, String) -> URI)
-> (Binding -> (SAMLVersion, String)) -> Binding -> URI
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Binding -> (SAMLVersion, String)
f where
    f :: Binding -> (SAMLVersion, String)
f Binding
BindingSOAP         = (SAMLVersion
SAML20, String
"SOAP")
    f Binding
BindingPAOS         = (SAMLVersion
SAML20, String
"PAOS")
    f Binding
BindingHTTPRedirect = (SAMLVersion
SAML20, String
"HTTP-Redirect")
    f Binding
BindingHTTPPOST     = (SAMLVersion
SAML20, String
"HTTP-POST")
    f Binding
BindingHTTPArtifact = (SAMLVersion
SAML20, String
"HTTP-Artifact")
    f Binding
BindingURI          = (SAMLVersion
SAML20, String
"URI")