summaryrefslogtreecommitdiff
path: root/lib/bio/types.myr
blob: 7b99d6604a643baafcbcaf2288ec47b5a7bc3da7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
use std

pkg bio =
	type mode = int
	const Rd	: mode = 1
	const Wr	: mode = 2
	const Rw	: mode = 1 | 2

	type file = struct
		/* backing io ops */
		mode	: mode
		lasterr	: std.errno

		read	: (buf : byte[:] -> std.result(std.size, std.errno))
		write	: (buf : byte[:] -> std.result(std.size, std.errno))
		seek	: (idx : std.off -> std.result(std.off, std.errno))
		close	: (-> bool)

		/* read buffer */
		rbuf	: byte[:]
		rstart	: std.size
		rend	: std.size

		/* write buffer */
		wbuf	: byte[:]
		wend	: std.size
	;;

	type vtab = struct
		read	: (buf : byte[:] -> std.result(std.size, std.errno))
		write	: (buf : byte[:] -> std.result(std.size, std.errno))
		seek	: (idx : std.off -> std.result(std.off, std.errno))
		close	: (-> bool)
	;;

	type err = union
		`Eof
		`Eio
		`Ebadf
	;;
;;