module Crypto.Noise.Internal.HandshakePattern where
import Control.Lens
import Control.Monad.Free.Church
import Control.Monad.Free.TH
import Data.ByteString (ByteString)
data TokenF next
= E next
| S next
| Ee next
| Es next
| Se next
| Ss next
deriving Functor
$(makeFree ''TokenF)
data HandshakePatternF next
= PreInitiator (F TokenF ()) next
| PreResponder (F TokenF ()) next
| Initiator (F TokenF ()) next
| Responder (F TokenF ()) next
deriving Functor
$(makeFree ''HandshakePatternF)
data HandshakePattern =
HandshakePattern { _hpName :: ByteString
, _hpActions :: F HandshakePatternF ()
}
$(makeLenses ''HandshakePattern)