@@ -4,22 +4,19 @@ import (
4
4
"bytes"
5
5
6
6
"github.com/ipfs/go-cid"
7
- "github.com/ipld/go-ipld-prime"
8
7
"github.com/ipld/go-ipld-prime/codec/dagcbor"
8
+ "github.com/ipld/go-ipld-prime/datamodel"
9
9
basicnode "github.com/ipld/go-ipld-prime/node/basic"
10
10
peer "github.com/libp2p/go-libp2p-core/peer"
11
11
12
12
datatransfer "github.com/filecoin-project/go-data-transfer/v2"
13
13
"github.com/filecoin-project/go-data-transfer/v2/channels/internal"
14
+ ipldutils "github.com/filecoin-project/go-data-transfer/v2/ipldutils"
14
15
)
15
16
16
17
// channelState is immutable channel data plus mutable state
17
18
type channelState struct {
18
19
ic internal.ChannelState
19
-
20
- // additional voucherResults
21
- voucherResultDecoder DecoderByTypeFunc
22
- voucherDecoder DecoderByTypeFunc
23
20
}
24
21
25
22
// EmptyChannelState is the zero value for channel state, meaning not present
@@ -45,7 +42,7 @@ func (c channelState) BaseCID() cid.Cid { return c.ic.BaseCid }
45
42
46
43
// Selector returns the IPLD selector for this data transfer (represented as
47
44
// an IPLD node)
48
- func (c channelState ) Selector () ipld .Node {
45
+ func (c channelState ) Selector () datamodel .Node {
49
46
builder := basicnode .Prototype .Any .NewBuilder ()
50
47
reader := bytes .NewReader (c .ic .Selector .Raw )
51
48
err := dagcbor .Decode (builder , reader )
@@ -56,13 +53,15 @@ func (c channelState) Selector() ipld.Node {
56
53
}
57
54
58
55
// Voucher returns the voucher for this data transfer
59
- func (c channelState ) Voucher () datatransfer.Voucher {
56
+ func (c channelState ) Voucher () ( datatransfer.TypedVoucher , error ) {
60
57
if len (c .ic .Vouchers ) == 0 {
61
- return nil
58
+ return datatransfer.TypedVoucher {}, nil
59
+ }
60
+ node , err := ipldutils .DeferredToNode (c .ic .Vouchers [0 ].Voucher )
61
+ if err != nil {
62
+ return datatransfer.TypedVoucher {}, err
62
63
}
63
- decoder , _ := c .voucherDecoder (c .ic .Vouchers [0 ].Type )
64
- encodable , _ := decoder .DecodeFromCbor (c .ic .Vouchers [0 ].Voucher .Raw )
65
- return encodable .(datatransfer.Voucher )
64
+ return datatransfer.TypedVoucher {Voucher : node , Type : c .ic .Vouchers [0 ].Type }, nil
66
65
}
67
66
68
67
// ReceivedCidsTotal returns the number of (non-unique) cids received so far
@@ -108,36 +107,46 @@ func (c channelState) Message() string {
108
107
return c .ic .Message
109
108
}
110
109
111
- func (c channelState ) Vouchers () []datatransfer.Voucher {
112
- vouchers := make ([]datatransfer.Voucher , 0 , len (c .ic .Vouchers ))
110
+ func (c channelState ) Vouchers () ( []datatransfer.TypedVoucher , error ) {
111
+ vouchers := make ([]datatransfer.TypedVoucher , 0 , len (c .ic .Vouchers ))
113
112
for _ , encoded := range c .ic .Vouchers {
114
- decoder , _ := c .voucherDecoder (encoded .Type )
115
- encodable , _ := decoder .DecodeFromCbor (encoded .Voucher .Raw )
116
- vouchers = append (vouchers , encodable .(datatransfer.Voucher ))
113
+ node , err := ipldutils .DeferredToNode (encoded .Voucher )
114
+ if err != nil {
115
+ return nil , err
116
+ }
117
+ vouchers = append (vouchers , datatransfer.TypedVoucher {Voucher : node , Type : encoded .Type })
117
118
}
118
- return vouchers
119
+ return vouchers , nil
119
120
}
120
121
121
- func (c channelState ) LastVoucher () datatransfer.Voucher {
122
- decoder , _ := c .voucherDecoder (c .ic .Vouchers [len (c .ic .Vouchers )- 1 ].Type )
123
- encodable , _ := decoder .DecodeFromCbor (c .ic .Vouchers [len (c .ic .Vouchers )- 1 ].Voucher .Raw )
124
- return encodable .(datatransfer.Voucher )
122
+ func (c channelState ) LastVoucher () (datatransfer.TypedVoucher , error ) {
123
+ ev := c .ic .Vouchers [len (c .ic .Vouchers )- 1 ]
124
+ node , err := ipldutils .DeferredToNode (ev .Voucher )
125
+ if err != nil {
126
+ return datatransfer.TypedVoucher {}, err
127
+ }
128
+ return datatransfer.TypedVoucher {Voucher : node , Type : ev .Type }, nil
125
129
}
126
130
127
- func (c channelState ) LastVoucherResult () datatransfer.VoucherResult {
128
- decoder , _ := c .voucherResultDecoder (c .ic .VoucherResults [len (c .ic .VoucherResults )- 1 ].Type )
129
- encodable , _ := decoder .DecodeFromCbor (c .ic .VoucherResults [len (c .ic .VoucherResults )- 1 ].VoucherResult .Raw )
130
- return encodable .(datatransfer.VoucherResult )
131
+ func (c channelState ) LastVoucherResult () (datatransfer.TypedVoucher , error ) {
132
+ evr := c .ic .VoucherResults [len (c .ic .VoucherResults )- 1 ]
133
+ node , err := ipldutils .DeferredToNode (evr .VoucherResult )
134
+ if err != nil {
135
+ return datatransfer.TypedVoucher {}, err
136
+ }
137
+ return datatransfer.TypedVoucher {Voucher : node , Type : evr .Type }, nil
131
138
}
132
139
133
- func (c channelState ) VoucherResults () []datatransfer.VoucherResult {
134
- voucherResults := make ([]datatransfer.VoucherResult , 0 , len (c .ic .VoucherResults ))
140
+ func (c channelState ) VoucherResults () ( []datatransfer.TypedVoucher , error ) {
141
+ voucherResults := make ([]datatransfer.TypedVoucher , 0 , len (c .ic .VoucherResults ))
135
142
for _ , encoded := range c .ic .VoucherResults {
136
- decoder , _ := c .voucherResultDecoder (encoded .Type )
137
- encodable , _ := decoder .DecodeFromCbor (encoded .VoucherResult .Raw )
138
- voucherResults = append (voucherResults , encodable .(datatransfer.VoucherResult ))
143
+ node , err := ipldutils .DeferredToNode (encoded .VoucherResult )
144
+ if err != nil {
145
+ return nil , err
146
+ }
147
+ voucherResults = append (voucherResults , datatransfer.TypedVoucher {Voucher : node , Type : encoded .Type })
139
148
}
140
- return voucherResults
149
+ return voucherResults , nil
141
150
}
142
151
143
152
func (c channelState ) SelfPeer () peer.ID {
@@ -174,12 +183,8 @@ func (c channelState) Stages() *datatransfer.ChannelStages {
174
183
return c .ic .Stages
175
184
}
176
185
177
- func fromInternalChannelState (c internal.ChannelState , voucherDecoder DecoderByTypeFunc , voucherResultDecoder DecoderByTypeFunc ) datatransfer.ChannelState {
178
- return channelState {
179
- ic : c ,
180
- voucherResultDecoder : voucherResultDecoder ,
181
- voucherDecoder : voucherDecoder ,
182
- }
186
+ func fromInternalChannelState (c internal.ChannelState ) datatransfer.ChannelState {
187
+ return channelState {ic : c }
183
188
}
184
189
185
190
var _ datatransfer.ChannelState = channelState {}
0 commit comments