module Bytezap.Class where

import Bytezap
import Bytezap.Bytes qualified as W
import Bytezap.Int qualified as W

import Data.ByteString ( ByteString )
import Data.Word
import Data.Int

class Put a where put :: a -> Write

instance Put Write where
    {-# INLINE put #-}
    put :: Write -> Write
put = Write -> Write
forall a. a -> a
id

instance Put ByteString where
    {-# INLINE put #-}
    put :: ByteString -> Write
put = ByteString -> Write
W.byteString

instance Put Word8 where
    {-# INLINE put #-}
    put :: Word8 -> Write
put = Word8 -> Write
W.w8

instance Put Word16 where
    {-# INLINE put #-}
    put :: Word16 -> Write
put = Word16 -> Write
W.w16

instance Put Word32 where
    {-# INLINE put #-}
    put :: Word32 -> Write
put = Word32 -> Write
W.w32

instance Put Word64 where
    {-# INLINE put #-}
    put :: Word64 -> Write
put = Word64 -> Write
W.w64

instance Put Int8 where
    {-# INLINE put #-}
    put :: Int8 -> Write
put = Int8 -> Write
W.i8

instance Put Int16 where
    {-# INLINE put #-}
    put :: Int16 -> Write
put = Int16 -> Write
W.i16

instance Put Int32 where
    {-# INLINE put #-}
    put :: Int32 -> Write
put = Int32 -> Write
W.i32

instance Put Int64 where
    {-# INLINE put #-}
    put :: Int64 -> Write
put = Int64 -> Write
W.i64