2
0
mirror of synced 2025-02-24 06:38:14 +00:00
torrent/storage/interface.go
2020-11-03 14:28:16 +11:00

51 lines
1.2 KiB
Go

package storage
import (
"io"
"github.com/anacrolix/torrent/metainfo"
)
type ClientImplCloser interface {
ClientImpl
Close() error
}
// Represents data storage for an unspecified torrent.
type ClientImpl interface {
OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
}
// Data storage bound to a torrent.
type TorrentImpl interface {
Piece(metainfo.Piece) PieceImpl
Close() error
}
// Interacts with torrent piece data.
type PieceImpl interface {
// These interfaces are not as strict as normally required. They can
// assume that the parameters are appropriate for the dimensions of the
// piece.
io.ReaderAt
io.WriterAt
// Called when the client believes the piece data will pass a hash check.
// The storage can move or mark the piece data as read-only as it sees
// fit.
MarkComplete() error
MarkNotComplete() error
// Returns true if the piece is complete.
Completion() Completion
}
// Optional PieceImpl interface when pieces support a more efficient way to write incomplete chunks
// out.
type IncompletePieceToWriter interface {
WriteIncompleteTo(w io.Writer) error
}
type Completion struct {
Complete bool
Ok bool
}