-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.go
More file actions
161 lines (124 loc) · 4.51 KB
/
api.go
File metadata and controls
161 lines (124 loc) · 4.51 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package fuse
import "bytelog.org/fuse/proto"
type Request interface{}
type Response interface{}
type Filesystem interface {
Init(*Context, *InitIn, *InitOut) error
Access(*Context, *AccessIn) error
Getattr(*Context, *GetattrIn, *GetattrOut) error
Destroy(*Context) error
Lookup(*Context, *LookupIn, *LookupOut) error
Forget(*Context, *ForgetIn)
Setattr(*Context, *SetattrIn, *SetattrOut) error
Readlink(*Context, *ReadlinkOut) error
Symlink(*Context, *SymlinkIn, *SymlinkOut) error
Mknod(*Context, *MknodIn, *MknodOut) error
Mkdir(*Context, *MkdirIn, *MkdirOut) error
Unlink(*Context, *UnlinkIn) error
Rmdir(*Context, *RmdirIn) error
Rename(*Context, *RenameIn) error
Link(*Context, *LinkIn, *LinkOut) error
Open(*Context, *OpenIn, *OpenOut) error
Read(*Context, *ReadIn, *ReadOut) error
Lseek(*Context, *LseekIn, *LseekOut) error
CopyFileRange(*Context, *CopyFileRangeIn) error
Release(*Context, *ReleaseIn) error
Getxattr(*Context, *GetxattrIn, *GetxattrOut) error
// todo: what about *EntryOut? Less types?
/*Destroy(*Context, *DestroyIn, *DestroyOut) error
Access(*Context, *AccessIn, *AccessOut) error
Lookup(*Context, *LookupIn, *LookupOut) error
Opendir(*Context, *OpendirIn, *OpendirOut) error
Readdir(*Context, *ReaddirIn, *ReaddirOut) error*/
/*
Lookup(r Request, name string) (EntryOut, error)
Forget(r Request, lookups uint64)
GetAttr(r Request, flags uint32, fh uint64) (AttrOut, error)
SetAttr(r Request, in SetAttrIn) (AttrOut, error)
Readlink(r Request) ([]byte, error)
Symlink(r Request, name, target string) (EntryOut, error)
Mknod(r Request, name string, mode os.FileMode, dev uint32) (EntryOut, error)
Mkdir(r Request, name string, mode os.FileMode) (EntryOut, error)
Unlink(r Request, name string) error
Rmdir(r Request, name string) error
// todo: make it clear that parent is the target's new inode.
Rename(r Request, name string, parent uint64, target string) (EntryOut, error)
Link(r Request, parent uint64, target string) (EntryOut, error)
// Open(r Request, flags uint32) (fh uint64, flags uint32, err error)
Read(r Request, fh uint64, offset int64, size uint32) ([]byte, error)
Write(r Request, fh uint64, offset int64, data []byte, flags uint32) (uint32, error)
*/
}
var _ Filesystem = HandlerFunc(nil)
type HandlerFunc func(*Context, Request, Response) error
func (f HandlerFunc) Lookup(ctx *Context, in *LookupIn, out *LookupOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Forget(ctx *Context, in *ForgetIn) {
_ = f(ctx, in, nil)
}
func (f HandlerFunc) Init(ctx *Context, in *InitIn, out *InitOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Access(ctx *Context, in *AccessIn) error {
return f(ctx, in, nil)
}
func (f HandlerFunc) Getattr(ctx *Context, in *GetattrIn, out *GetattrOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Destroy(ctx *Context) error {
return f(ctx, nil, nil)
}
func (f HandlerFunc) Setattr(ctx *Context, in *SetattrIn, out *SetattrOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Readlink(ctx *Context, out *ReadlinkOut) error {
return f(ctx, nil, out)
}
func (f HandlerFunc) Symlink(ctx *Context, in *SymlinkIn, out *SymlinkOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Mknod(ctx *Context, in *MknodIn, out *MknodOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Mkdir(ctx *Context, in *MkdirIn, out *MkdirOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Unlink(ctx *Context, in *UnlinkIn) error {
return f(ctx, in, nil)
}
func (f HandlerFunc) Rmdir(ctx *Context, in *RmdirIn) error {
return f(ctx, in, nil)
}
func (f HandlerFunc) Rename(ctx *Context, in *RenameIn) error {
return f(ctx, in, nil)
}
func (f HandlerFunc) Link(ctx *Context, in *LinkIn, out *LinkOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Open(ctx *Context, in *OpenIn, out *OpenOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Read(ctx *Context, in *ReadIn, out *ReadOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) Lseek(ctx *Context, in *LseekIn, out *LseekOut) error {
return f(ctx, in, out)
}
func (f HandlerFunc) CopyFileRange(ctx *Context, in *CopyFileRangeIn) error {
return f(ctx, in, nil)
}
func (f HandlerFunc) Release(ctx *Context, in *ReleaseIn) error {
return f(ctx, in, nil)
}
func (f HandlerFunc) Getxattr(ctx *Context, in *GetxattrIn, out *GetxattrOut) error {
return f(ctx, in, out)
}
var DefaultFilesystem = HandlerFunc(func(ctx *Context, req Request, resp Response) error {
switch ctx.Op {
case proto.INIT:
return nil
default:
return ENOSYS
}
})