restic/vendor/github.com/pkg/sftp/request-interfaces.go

56 lines
1.9 KiB
Go
Raw Normal View History

2017-07-23 12:24:45 +00:00
package sftp
import (
"io"
"os"
)
// Interfaces are differentiated based on required returned values.
// All input arguments are to be pulled from Request (the only arg).
// The Handler interfaces all take the Request object as its only argument.
// All the data you should need to handle the call are in the Request object.
// The request.Method attribute is initially the most important one as it
// determines which Handler gets called.
// FileReader should return an io.ReaderAt for the filepath
// Note in cases of an error, the error text will be sent to the client.
// Called for Methods: Get
2017-07-23 12:24:45 +00:00
type FileReader interface {
2017-09-13 12:09:48 +00:00
Fileread(*Request) (io.ReaderAt, error)
2017-07-23 12:24:45 +00:00
}
// FileWriter should return an io.WriterAt for the filepath.
//
// The request server code will call Close() on the returned io.WriterAt
// ojbect if an io.Closer type assertion succeeds.
// Note in cases of an error, the error text will be sent to the client.
// Called for Methods: Put, Open
2017-07-23 12:24:45 +00:00
type FileWriter interface {
2017-09-13 12:09:48 +00:00
Filewrite(*Request) (io.WriterAt, error)
2017-07-23 12:24:45 +00:00
}
// FileCmder should return an error
// Note in cases of an error, the error text will be sent to the client.
// Called for Methods: Setstat, Rename, Rmdir, Mkdir, Symlink, Remove
2017-07-23 12:24:45 +00:00
type FileCmder interface {
2017-09-13 12:09:48 +00:00
Filecmd(*Request) error
2017-07-23 12:24:45 +00:00
}
// FileLister should return an object that fulfils the ListerAt interface
// Note in cases of an error, the error text will be sent to the client.
// Called for Methods: List, Stat, Readlink
2017-09-13 12:09:48 +00:00
type FileLister interface {
Filelist(*Request) (ListerAt, error)
}
// ListerAt does for file lists what io.ReaderAt does for files.
// ListAt should return the number of entries copied and an io.EOF
// error if at end of list. This is testable by comparing how many you
// copied to how many could be copied (eg. n < len(ls) below).
// The copy() builtin is best for the copying.
// Note in cases of an error, the error text will be sent to the client.
2017-09-13 12:09:48 +00:00
type ListerAt interface {
ListAt([]os.FileInfo, int64) (int, error)
2017-07-23 12:24:45 +00:00
}