@@ -3,38 +3,26 @@ module Data.ArrayBuffer.Serializer where
33import Data.ArrayBuffer.Types
44import qualified Data.ArrayBuffer as AB
55import qualified Data.ArrayBuffer.DataView as DV
6+ import Data.ArrayBuffer.Advancer
67import Data.Function
78import Control.Monad.Eff
89
9- foreign import advance
10- """
11- function advance(d) {
12- return function(s) {
13- return function() {
14- d.off += s;
15- };
16- };
17- }
18- """ :: forall e . Serializer -> AB.ByteOffset -> Eff (writer :: DV.Writer | e ) Unit
19-
20- newtype Serializer = Serializer { dv :: DV.DataView , off :: AB.ByteOffset }
10+ type Serializer = Advancer
2111
2212class IsSerializable a where
2313 put :: forall e . Serializer -> a -> Eff (writer :: DV.Writer | e ) Unit
2414
2515instance isSerializableInt8 :: IsSerializable Int8 where
26- put ss@(Serializer s) v = do
27- DV .setInt8 s.dv s.off v
28- advance ss 1
16+ put s v = advance 1 s >>= DV .setInt8 s.dv v
2917
30- serializer :: forall e . AB. ByteLength -> Eff (writer :: DV.Writer | e ) Serializer
31- serializer l = return $ Serializer { dv : DV .whole $ AB .create l, off : 0 }
18+ serializer :: forall e . ByteLength -> Eff (writer :: DV.Writer | e ) Serializer
19+ serializer l = return $ { dv : DV .whole $ AB .create l, off : 0 }
3220
3321close :: Serializer -> forall e . Eff (writer :: DV.Writer | e ) AB.ArrayBuffer
34- close ( Serializer s) = return $ AB .slice 0 s.off (DV .buffer s.dv)
22+ close s = return $ AB .slice 0 s.off (DV .buffer s.dv)
3523
36- serialized :: forall e . (Serializer -> Eff (writer :: DV.Writer | e ) Unit ) -> Eff (writer :: DV.Writer | e ) AB.ArrayBuffer
37- serialized f = do
38- s <- serializer 1000
24+ serialized :: forall e . ByteLength -> (Serializer -> Eff (writer :: DV.Writer | e ) Unit ) -> Eff (writer :: DV.Writer | e ) AB.ArrayBuffer
25+ serialized n f = do
26+ s <- serializer n
3927 f s
4028 close s
0 commit comments