]> Sergey Matveev's repositories - btrtrc.git/blob - storage/interface.go
Alter some directory permissioning in storage
[btrtrc.git] / storage / interface.go
1 package storage
2
3 import (
4         "io"
5
6         "github.com/anacrolix/torrent/metainfo"
7 )
8
9 type ClientImplCloser interface {
10         ClientImpl
11         Close() error
12 }
13
14 // Represents data storage for an unspecified torrent.
15 type ClientImpl interface {
16         OpenTorrent(info *metainfo.Info, infoHash metainfo.Hash) (TorrentImpl, error)
17 }
18
19 type TorrentCapacity *func() (cap int64, capped bool)
20
21 // Data storage bound to a torrent.
22 type TorrentImpl struct {
23         Piece func(p metainfo.Piece) PieceImpl
24         Close func() error
25         // Storages that share the same space, will provide equal pointers. The function is called once
26         // to determine the storage for torrents sharing the same function pointer, and mutated in
27         // place.
28         Capacity TorrentCapacity
29 }
30
31 // Interacts with torrent piece data. Optional interfaces to implement include:
32 //   io.WriterTo, such as when a piece supports a more efficient way to write out incomplete chunks.
33 //   SelfHashing, such as when a piece supports a more efficient way to hash its contents.
34 type PieceImpl interface {
35         // These interfaces are not as strict as normally required. They can
36         // assume that the parameters are appropriate for the dimensions of the
37         // piece.
38         io.ReaderAt
39         io.WriterAt
40         // Called when the client believes the piece data will pass a hash check.
41         // The storage can move or mark the piece data as read-only as it sees
42         // fit.
43         MarkComplete() error
44         MarkNotComplete() error
45         // Returns true if the piece is complete.
46         Completion() Completion
47 }
48
49 type Completion struct {
50         Complete bool
51         Ok       bool
52 }
53
54 // Allows a storage backend to override hashing (i.e. if it can do it more efficiently than the torrent client can)
55 type SelfHashing interface {
56         SelfHash() (metainfo.Hash, error)
57 }