cdp-0.0.1.0: src/CDP/Domains/IO.hs
{-# LANGUAGE OverloadedStrings, RecordWildCards, TupleSections #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeFamilies #-}
{- |
= IO
Input/Output operations for streams produced by DevTools.
-}
module CDP.Domains.IO (module CDP.Domains.IO) where
import Control.Applicative ((<$>))
import Control.Monad
import Control.Monad.Loops
import Control.Monad.Trans (liftIO)
import qualified Data.Map as M
import Data.Maybe
import Data.Functor.Identity
import Data.String
import qualified Data.Text as T
import qualified Data.List as List
import qualified Data.Text.IO as TI
import qualified Data.Vector as V
import Data.Aeson.Types (Parser(..))
import Data.Aeson (FromJSON (..), ToJSON (..), (.:), (.:?), (.=), (.!=), (.:!))
import qualified Data.Aeson as A
import qualified Network.HTTP.Simple as Http
import qualified Network.URI as Uri
import qualified Network.WebSockets as WS
import Control.Concurrent
import qualified Data.ByteString.Lazy as BS
import qualified Data.Map as Map
import Data.Proxy
import System.Random
import GHC.Generics
import Data.Char
import Data.Default
import CDP.Internal.Utils
import CDP.Domains.Runtime as Runtime
-- | Type 'IO.StreamHandle'.
-- This is either obtained from another method or specified as `blob:<uuid>` where
-- `<uuid>` is an UUID of a Blob.
type IOStreamHandle = T.Text
-- | Close the stream, discard any temporary backing storage.
-- | Parameters of the 'IO.close' command.
data PIOClose = PIOClose
{
-- | Handle of the stream to close.
pIOCloseHandle :: IOStreamHandle
}
deriving (Eq, Show)
pIOClose
{-
-- | Handle of the stream to close.
-}
:: IOStreamHandle
-> PIOClose
pIOClose
arg_pIOCloseHandle
= PIOClose
arg_pIOCloseHandle
instance ToJSON PIOClose where
toJSON p = A.object $ catMaybes [
("handle" A..=) <$> Just (pIOCloseHandle p)
]
instance Command PIOClose where
type CommandResponse PIOClose = ()
commandName _ = "IO.close"
fromJSON = const . A.Success . const ()
-- | Read a chunk of the stream
-- | Parameters of the 'IO.read' command.
data PIORead = PIORead
{
-- | Handle of the stream to read.
pIOReadHandle :: IOStreamHandle,
-- | Seek to the specified offset before reading (if not specificed, proceed with offset
-- following the last read). Some types of streams may only support sequential reads.
pIOReadOffset :: Maybe Int,
-- | Maximum number of bytes to read (left upon the agent discretion if not specified).
pIOReadSize :: Maybe Int
}
deriving (Eq, Show)
pIORead
{-
-- | Handle of the stream to read.
-}
:: IOStreamHandle
-> PIORead
pIORead
arg_pIOReadHandle
= PIORead
arg_pIOReadHandle
Nothing
Nothing
instance ToJSON PIORead where
toJSON p = A.object $ catMaybes [
("handle" A..=) <$> Just (pIOReadHandle p),
("offset" A..=) <$> (pIOReadOffset p),
("size" A..=) <$> (pIOReadSize p)
]
data IORead = IORead
{
-- | Set if the data is base64-encoded
iOReadBase64Encoded :: Maybe Bool,
-- | Data that were read.
iOReadData :: T.Text,
-- | Set if the end-of-file condition occurred while reading.
iOReadEof :: Bool
}
deriving (Eq, Show)
instance FromJSON IORead where
parseJSON = A.withObject "IORead" $ \o -> IORead
<$> o A..:? "base64Encoded"
<*> o A..: "data"
<*> o A..: "eof"
instance Command PIORead where
type CommandResponse PIORead = IORead
commandName _ = "IO.read"
-- | Return UUID of Blob object specified by a remote object id.
-- | Parameters of the 'IO.resolveBlob' command.
data PIOResolveBlob = PIOResolveBlob
{
-- | Object id of a Blob object wrapper.
pIOResolveBlobObjectId :: Runtime.RuntimeRemoteObjectId
}
deriving (Eq, Show)
pIOResolveBlob
{-
-- | Object id of a Blob object wrapper.
-}
:: Runtime.RuntimeRemoteObjectId
-> PIOResolveBlob
pIOResolveBlob
arg_pIOResolveBlobObjectId
= PIOResolveBlob
arg_pIOResolveBlobObjectId
instance ToJSON PIOResolveBlob where
toJSON p = A.object $ catMaybes [
("objectId" A..=) <$> Just (pIOResolveBlobObjectId p)
]
data IOResolveBlob = IOResolveBlob
{
-- | UUID of the specified Blob.
iOResolveBlobUuid :: T.Text
}
deriving (Eq, Show)
instance FromJSON IOResolveBlob where
parseJSON = A.withObject "IOResolveBlob" $ \o -> IOResolveBlob
<$> o A..: "uuid"
instance Command PIOResolveBlob where
type CommandResponse PIOResolveBlob = IOResolveBlob
commandName _ = "IO.resolveBlob"