module Language.Haskell.LSP.Test.Parsing
( -- $receiving
satisfy
+ , satisfyMaybe
, message
, anyRequest
, anyResponse
import Control.Monad
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as B
-import Data.Conduit.Parser
+import Data.Conduit.Parser hiding (named)
+import qualified Data.Conduit.Parser (named)
import qualified Data.Text as T
import Data.Typeable
import Language.Haskell.LSP.Messages
-- | Consumes and returns the result of the specified predicate if it returns `Just`.
--
--- @since 0.5.3.0
+-- @since 0.6.1.0
satisfyMaybe :: (FromServerMessage -> Maybe a) -> Session a
satisfyMaybe pred = do
skipTimeout <- overridingTimeout <$> get
- timeoutId <- curTimeoutId <$> get
+ timeoutId <- getCurTimeoutId
unless skipTimeout $ do
chan <- asks messageChan
timeout <- asks (messageTimeout . config)
threadDelay (timeout * 1000000)
writeChan chan (TimeoutMessage timeoutId)
- x <- await
+ x <- Session await
- unless skipTimeout $
- modify $ \s -> s { curTimeoutId = timeoutId + 1 }
+ unless skipTimeout (bumpTimeoutId timeoutId)
modify $ \s -> s { lastReceivedMessage = Just x }
return a
Nothing -> empty
+named :: T.Text -> Session a -> Session a
+named s (Session x) = Session (Data.Conduit.Parser.named s x)
+
-- | Matches a message of type @a@.
message :: forall a. (Typeable a, FromJSON a) => Session a
message =