/
exchange_internal.go
101 lines (83 loc) · 2.55 KB
/
exchange_internal.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
// Copyright 2019 ProximaX Limited. All rights reserved.
// Use of this source code is governed by the Apache 2.0
// license that can be found in the LICENSE file.
package sdk
type offerInfoDTO struct {
MosaicId uint64DTO `json:"mosaicId"`
Amount uint64DTO `json:"amount"`
PriceNumerator uint64DTO `json:"initialCost"`
PriceDenominator uint64DTO `json:"initialAmount"`
Deadline uint64DTO `json:"deadline"`
Owner string `json:"owner"`
Type OfferType `json:"type"`
}
type offerInfoDTOs []*offerInfoDTO
func (ref *offerInfoDTOs) toStruct(networkType NetworkType) ([]*OfferInfo, error) {
var (
dtos = *ref
offers = make([]*OfferInfo, len(*ref))
)
for i, dto := range dtos {
owner, err := NewAccountFromPublicKey(dto.Owner, networkType)
if err != nil {
return nil, err
}
mosaicId, err := NewMosaicId(dto.MosaicId.toUint64())
if err != nil {
return nil, err
}
offers[i] = &OfferInfo{
Type: dto.Type,
Owner: owner,
Mosaic: newMosaicPanic(mosaicId, dto.Amount.toStruct()),
PriceDenominator: dto.PriceDenominator.toStruct(),
PriceNumerator: dto.PriceNumerator.toStruct(),
Deadline: dto.Deadline.toStruct(),
}
}
return offers, nil
}
type exchangeDTO struct {
Exchange struct {
Owner string `json:"owner"`
BuyOffers offerInfoDTOs `json:"buyOffers"`
SellOffers offerInfoDTOs `json:"sellOffers"`
} `json:"exchange"`
}
func (ref *exchangeDTO) toStruct(networkType NetworkType) (*UserExchangeInfo, error) {
owner, err := NewAccountFromPublicKey(ref.Exchange.Owner, networkType)
if err != nil {
return nil, err
}
for _, dto := range ref.Exchange.BuyOffers {
dto.Type = BuyOffer
dto.Owner = owner.PublicKey
}
for _, dto := range ref.Exchange.SellOffers {
dto.Type = SellOffer
dto.Owner = owner.PublicKey
}
offersMap := make(map[OfferType]map[MosaicId]*OfferInfo)
offersMap[BuyOffer] = make(map[MosaicId]*OfferInfo)
offersMap[SellOffer] = make(map[MosaicId]*OfferInfo)
offers, err := ref.Exchange.BuyOffers.toStruct(networkType)
for _, offer := range offers {
mosaicId, err := NewMosaicId(offer.Mosaic.AssetId.Id())
if err != nil {
return nil, err
}
offersMap[BuyOffer][*mosaicId] = offer
}
offers, err = ref.Exchange.SellOffers.toStruct(networkType)
for _, offer := range offers {
mosaicId, err := NewMosaicId(offer.Mosaic.AssetId.Id())
if err != nil {
return nil, err
}
offersMap[SellOffer][*mosaicId] = offer
}
return &UserExchangeInfo{
Owner: owner,
Offers: offersMap,
}, nil
}