/
discounts.go
54 lines (44 loc) · 1.04 KB
/
discounts.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
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
)
// --------------------------------------------- Discounts
type Discounts []Discount
func NewDiscounts(discounts ...Discount) Discounts {
return Discounts(discounts)
}
func (ds Discounts) Validate() error {
if len(ds) == 0 {
return nil
}
// Check that discount IDs are sequential, STRICTLY starting with 1,
// since in a payment contract zero indicates the lack of discount
id := sdk.OneUint()
for _, d := range ds {
if !d.Id.Equal(id) {
return ErrDiscountIDsBeSequentialFrom1
}
id = id.Add(sdk.OneUint())
}
// Validate list of discounts
for _, d := range ds {
if err := d.Validate(); err != nil {
return err
}
}
return nil
}
func NewDiscount(id sdk.Uint, percent sdk.Dec) Discount {
return Discount{
Id: id,
Percent: percent,
}
}
func (d Discount) Validate() error {
if !d.Percent.IsPositive() {
return ErrNegativeDiscountPercentage
} else if d.Percent.GT(sdk.NewDec(100)) {
return ErrDiscountPercentageGreaterThan100
}
return nil
}