0 | module System.File.Buffer
2 | import public System.File.Error
3 | import System.File.Handle
4 | import System.File.Meta
5 | import System.File.Mode
6 | import System.File.ReadWrite
7 | import System.File.Support
8 | import public System.File.Types
14 | %foreign supportC "idris2_readBufferData"
15 | "node:lambda:(f,b,l,m) => require('fs').readSync(f.fd,b,l,m)"
16 | prim__readBufferData : FilePtr -> Buffer -> (offset : Int) -> (maxbytes : Int) -> PrimIO Int
18 | %foreign supportC "idris2_writeBufferData"
19 | "node:lambda:(f,b,l,m) => require('fs').writeSync(f.fd,b,l,m)"
20 | prim__writeBufferData : FilePtr -> Buffer -> (offset : Int) -> (size : Int) -> PrimIO Int
29 | readBufferData : HasIO io => (fh : File) -> (buf : Buffer) ->
32 | io (Either FileError Int)
33 | readBufferData (FHandle h) buf offset max
34 | = do read <- primIO (prim__readBufferData h buf offset max)
36 | then pure (Right read)
37 | else pure (Left FileReadError)
50 | writeBufferData : HasIO io => (fh : File) -> (buf : Buffer) ->
53 | io (Either (FileError, Int) ())
54 | writeBufferData (FHandle h) buf offset size
55 | = do written <- primIO (prim__writeBufferData h buf offset size)
57 | then pure (Right ())
58 | else pure (Left (FileWriteError, written))
68 | writeBufferToFile : HasIO io => (fn : String) -> (buf : Buffer) -> (size : Int) ->
69 | io (Either (FileError, Int) ())
70 | writeBufferToFile fn buf size
71 | = do Right f <- openFile fn WriteTruncate
72 | | Left err => pure (Left (err, 0))
73 | Right ok <- writeBufferData f buf 0 size
74 | | Left err => pure (Left err)
83 | createBufferFromFile : HasIO io => (fn : String) -> io (Either FileError Buffer)
84 | createBufferFromFile fn
85 | = do Right f <- openFile fn Read
86 | | Left err => pure (Left err)
87 | Right size <- fileSize f
88 | | Left err => pure (Left err)
89 | Just buf <- newBuffer size
90 | | Nothing => pure (Left FileReadError)
91 | Right ok <- readBufferData f buf 0 size
92 | | Left err => pure (Left err)