forked from stellar-deprecated/kelp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanage_offer.go
133 lines (116 loc) · 3.48 KB
/
manage_offer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package build
import (
"github.com/stellar/go/amount"
"github.com/stellar/go/price"
"github.com/stellar/go/support/errors"
"github.com/stellar/go/xdr"
)
// CreateOffer creates a new offer
func CreateOffer(rate Rate, amount Amount) (result ManageOfferBuilder) {
return ManageOffer(false, rate, amount)
}
// CreatePassiveOffer creates a new passive offer
func CreatePassiveOffer(rate Rate, amount Amount) (result ManageOfferBuilder) {
return ManageOffer(true, rate, amount)
}
// UpdateOffer updates an existing offer
func UpdateOffer(rate Rate, amount Amount, offerID OfferID) (result ManageOfferBuilder) {
return ManageOffer(false, rate, amount, offerID)
}
// DeleteOffer deletes an existing offer
func DeleteOffer(rate Rate, offerID OfferID) (result ManageOfferBuilder) {
return ManageOffer(false, rate, Amount("0"), offerID)
}
// ManageOffer groups the creation of a new ManageOfferBuilder with a call to Mutate.
func ManageOffer(passiveOffer bool, muts ...interface{}) (result ManageOfferBuilder) {
result.PassiveOffer = passiveOffer
result.Mutate(muts...)
return
}
// ManageOfferMutator is a interface that wraps the
// MutateManageOffer operation. types may implement this interface to
// specify how they modify an xdr.ManageOfferOp object
type ManageOfferMutator interface {
MutateManageOffer(interface{}) error
}
// ManageOfferBuilder represents a transaction that is being built.
// Deprecated use txnbuild.ManageSellOffer instead
type ManageOfferBuilder struct {
PassiveOffer bool
O xdr.Operation
MO xdr.ManageSellOfferOp
PO xdr.CreatePassiveSellOfferOp
Err error
}
// Mutate applies the provided mutators to this builder's offer or operation.
func (b *ManageOfferBuilder) Mutate(muts ...interface{}) {
for _, m := range muts {
var err error
switch mut := m.(type) {
case ManageOfferMutator:
if b.PassiveOffer {
err = mut.MutateManageOffer(&b.PO)
} else {
err = mut.MutateManageOffer(&b.MO)
}
case OperationMutator:
err = mut.MutateOperation(&b.O)
default:
err = errors.New("Mutator type not allowed")
}
if err != nil {
b.Err = errors.Wrap(err, "ManageOfferBuilder error")
return
}
}
}
// MutateManageOffer for Amount sets the ManageOfferOp's Amount field
func (m Amount) MutateManageOffer(o interface{}) (err error) {
switch o := o.(type) {
default:
err = errors.New("Unexpected operation type")
case *xdr.ManageSellOfferOp:
o.Amount, err = amount.Parse(string(m))
case *xdr.CreatePassiveSellOfferOp:
o.Amount, err = amount.Parse(string(m))
}
return
}
// MutateManageOffer for OfferID sets the ManageOfferOp's OfferID field
func (m OfferID) MutateManageOffer(o interface{}) (err error) {
switch o := o.(type) {
default:
err = errors.New("Unexpected operation type")
case *xdr.ManageSellOfferOp:
o.OfferId = xdr.Int64(m)
}
return
}
// MutateManageOffer for Rate sets the ManageOfferOp's selling, buying and price fields
func (m Rate) MutateManageOffer(o interface{}) (err error) {
switch o := o.(type) {
default:
err = errors.New("Unexpected operation type")
case *xdr.ManageSellOfferOp:
o.Selling, err = m.Selling.ToXDR()
if err != nil {
return
}
o.Buying, err = m.Buying.ToXDR()
if err != nil {
return
}
o.Price, err = price.Parse(string(m.Price))
case *xdr.CreatePassiveSellOfferOp:
o.Selling, err = m.Selling.ToXDR()
if err != nil {
return
}
o.Buying, err = m.Buying.ToXDR()
if err != nil {
return
}
o.Price, err = price.Parse(string(m.Price))
}
return
}