package kubelwagen

import "github.com/hanwen/go-fuse/fuse"

type Method int

const (
	MethodInvalid Method = iota
	MethodOpenDir
	MethodGetAttr
	MethodStatFs
	MethodChmod
	MethodChown
	MethodTruncate
	MethodMknod
	MethodMkdir
	MethodUnlink
	MethodRmdir
	MethodSymlink
	MethodRename
	MethodLink
	MethodReadLink
	MethodAccess
)

type Request struct {
	ID      int    `json:"id"`
	Method  Method `json:"method"`
	Path    string `json:"path"`
	Mode    uint32
	UID     int32
	GID     int32
	Size    int32
	Dev     int32
	Flags   int32
	Offset  int64
	NewPath string `json:"newpath,omitempty"`
	Attr    string `json:"attr,omitempty"`
	Data    []byte `json:"data,omitempty"`
}

type RequestCallback struct {
	message  Request
	response chan Response
}

type Response struct {
	ID      int             `json:"id"`
	Code    fuse.Status     `json:"status"`
	Data    []byte          `json:"data,omitempty"`
	Stat    *fuse.Attr      `json:"stat,omitempty"`
	Attrs   []string        `json:"attrs,omitempty"`
	Dirents []fuse.DirEntry `json:"dirents,omitempty"`
	LinkStr string          `json:"linkstr,omitempty"`
	Statfs  *fuse.StatfsOut `json:"statfs,omitempty"`
}
