-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | 9P2000 in pure Haskell
--   
--   Pure Haskell implementation of the 9P2000 protocol from the Plan 9 and
--   Inferno operating systems. Many implementations of 9P2000 exist
--   including the Linux kernel v9fs module, wmii (X window manager). More
--   information on 9P and implementations may be found at
--   http://9p.cat-v.org
@package NineP
@version 0.0.2.1


-- | Module providing Binary serialization of 9P messages to and from lazy
--   ByteStrings.
--   
--   This library does not currently provide any networking support or
--   wrappers for easy to write clients or servers, though that may come
--   with time as we decide the best way to implement these.
--   
--   9P2000 messages are sent in little endian byte order rather than
--   network byte order (big endian)
--   
--   Lightly tested against an Inferno operating system share with no
--   authentication successfully.
module Data.NineP
class Bin a
get :: Bin a => Get a
put :: Bin a => a -> Put

-- | A Plan 9 Qid type. See <a>http://9p.cat-v.org</a> for more information
data Qid
Qid :: Word8 -> Word32 -> Word64 -> Qid
[qid_typ] :: Qid -> Word8
[qid_vers] :: Qid -> Word32
[qid_path] :: Qid -> Word64

-- | Provides information on a path entry at a 9P2000 server
data Stat
Stat :: Word16 -> Word32 -> Qid -> Word32 -> Word32 -> Word32 -> Word64 -> String -> String -> String -> String -> Stat
[st_typ] :: Stat -> Word16
[st_dev] :: Stat -> Word32
[st_qid] :: Stat -> Qid
[st_mode] :: Stat -> Word32
[st_atime] :: Stat -> Word32
[st_mtime] :: Stat -> Word32
[st_length] :: Stat -> Word64
[st_name] :: Stat -> String
[st_uid] :: Stat -> String
[st_gid] :: Stat -> String
[st_muid] :: Stat -> String

-- | The message envelope type for all 9P2000 messages
data Msg
Msg :: Tag -> Word16 -> VarMsg -> Msg
[msg_typ] :: Msg -> Tag
[msg_tag] :: Msg -> Word16
[msg_body] :: Msg -> VarMsg

-- | A type that enumerates all the valid <i>(and one invalid)</i> message
--   types in 9P2000
data Tag
TTversion :: Tag
TRversion :: Tag
TTauth :: Tag
TRauth :: Tag
TTattach :: Tag
TRattach :: Tag
XXX_TTerror :: Tag
TRerror :: Tag
TTflush :: Tag
TRflush :: Tag
TTwalk :: Tag
TRwalk :: Tag
TTopen :: Tag
TRopen :: Tag
TTcreate :: Tag
TRcreate :: Tag
TTread :: Tag
TRread :: Tag
TTwrite :: Tag
TRwrite :: Tag
TTclunk :: Tag
TRclunk :: Tag
TTremove :: Tag
TRremove :: Tag
TTstat :: Tag
TRstat :: Tag
TTwstat :: Tag
TRwstat :: Tag

-- | A variable message type that encapsulates the valid kinds of messages
--   in a 9P2000 payload
data VarMsg
Tversion :: Word32 -> String -> VarMsg
[tv_msize] :: VarMsg -> Word32
[tv_version] :: VarMsg -> String
Rversion :: Word32 -> String -> VarMsg
[rv_msize] :: VarMsg -> Word32
[rv_version] :: VarMsg -> String
Tauth :: Word32 -> String -> String -> VarMsg
[tau_afid] :: VarMsg -> Word32
[tau_uname] :: VarMsg -> String
[tau_aname] :: VarMsg -> String
Rauth :: Qid -> VarMsg
[ra_aqid] :: VarMsg -> Qid
Rerror :: String -> VarMsg
[re_ename] :: VarMsg -> String
Tflush :: Word16 -> VarMsg
[tf_oldtag] :: VarMsg -> Word16
Rflush :: VarMsg
Tattach :: Word32 -> Word32 -> String -> String -> VarMsg
[tat_fid] :: VarMsg -> Word32
[tat_afid] :: VarMsg -> Word32
[tat_uname] :: VarMsg -> String
[tat_aname] :: VarMsg -> String
Rattach :: Qid -> VarMsg
[rat_qid] :: VarMsg -> Qid
Twalk :: Word32 -> Word32 -> [String] -> VarMsg
[tw_fid] :: VarMsg -> Word32
[tw_newfid] :: VarMsg -> Word32
[tw_wnames] :: VarMsg -> [String]
Rwalk :: [Qid] -> VarMsg
[rw_wqid] :: VarMsg -> [Qid]
Topen :: Word32 -> Word8 -> VarMsg
[to_fid] :: VarMsg -> Word32
[to_mode] :: VarMsg -> Word8
Ropen :: Qid -> Word32 -> VarMsg
[ro_qid] :: VarMsg -> Qid
[ro_iounit] :: VarMsg -> Word32
Tcreate :: Word32 -> String -> Word32 -> Word8 -> VarMsg
[tcr_fid] :: VarMsg -> Word32
[tcr_name] :: VarMsg -> String
[tcr_perm] :: VarMsg -> Word32
[tcr_mode] :: VarMsg -> Word8
Rcreate :: Qid -> Word32 -> VarMsg
[rcr_qid] :: VarMsg -> Qid
[rcr_iounit] :: VarMsg -> Word32
Tread :: Word32 -> Word64 -> Word32 -> VarMsg
[trd_fid] :: VarMsg -> Word32
[trd_offset] :: VarMsg -> Word64
[trd_count] :: VarMsg -> Word32
Rread :: ByteString -> VarMsg
[rrd_dat] :: VarMsg -> ByteString
Twrite :: Word32 -> Word64 -> ByteString -> VarMsg
[twr_fid] :: VarMsg -> Word32
[twr_offset] :: VarMsg -> Word64
[twr_dat] :: VarMsg -> ByteString
Rwrite :: Word32 -> VarMsg
[rw_count] :: VarMsg -> Word32
Tclunk :: Word32 -> VarMsg
[tcl_fid] :: VarMsg -> Word32
Rclunk :: VarMsg
Tremove :: Word32 -> VarMsg
[trm_fid] :: VarMsg -> Word32
Rremove :: VarMsg
Tstat :: Word32 -> VarMsg
[ts_fid] :: VarMsg -> Word32
Rstat :: [Stat] -> VarMsg
[rs_stat] :: VarMsg -> [Stat]
Twstat :: Word32 -> [Stat] -> VarMsg
[tws_fid] :: VarMsg -> Word32
[tws_stat] :: VarMsg -> [Stat]
Rwstat :: VarMsg

-- | For every lower level VarMsg type, encodes a full wrapper around that
--   type for use with 9P2000 streams
putVarMsg :: VarMsg -> Put

-- | For every messages type, runs a Get parser to decode that type of
--   payload from the 9P2000 stream
getVarMsg :: Tag -> Get VarMsg
instance GHC.Classes.Eq Data.NineP.Msg
instance GHC.Show.Show Data.NineP.Msg
instance GHC.Enum.Enum Data.NineP.Tag
instance GHC.Classes.Ord Data.NineP.Tag
instance GHC.Classes.Eq Data.NineP.Tag
instance GHC.Show.Show Data.NineP.Tag
instance GHC.Classes.Eq Data.NineP.VarMsg
instance GHC.Show.Show Data.NineP.VarMsg
instance GHC.Classes.Eq Data.NineP.Stat
instance GHC.Show.Show Data.NineP.Stat
instance GHC.Classes.Eq Data.NineP.Qid
instance GHC.Show.Show Data.NineP.Qid
instance Data.NineP.Bin Data.NineP.Msg
instance Data.NineP.Bin Data.NineP.Tag
instance Data.NineP.Bin Data.NineP.Stat
instance Data.NineP.Bin Data.NineP.Qid
instance Data.NineP.Bin GHC.Word.Word8
instance Data.NineP.Bin GHC.Word.Word16
instance Data.NineP.Bin GHC.Word.Word32
instance Data.NineP.Bin GHC.Word.Word64
instance Data.NineP.Bin GHC.Types.Char
instance Data.NineP.Bin GHC.Base.String
