forked from stellar/go
/
account.go
75 lines (65 loc) · 2.1 KB
/
account.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
package resourceadapter
import (
"context"
"fmt"
. "github.com/stellar/go/protocols/horizon"
"github.com/stellar/go/services/horizon/internal/db2/core"
"github.com/stellar/go/services/horizon/internal/httpx"
"github.com/stellar/go/support/errors"
"github.com/stellar/go/support/render/hal"
)
// PopulateAccount fills out the resource's fields
func PopulateAccount(
ctx context.Context,
dest *Account,
ca core.Account,
cd []core.AccountData,
cs []core.Signer,
ct []core.Trustline,
) error {
dest.ID = ca.Accountid
dest.AccountID = ca.Accountid
dest.Sequence = ca.Seqnum
dest.SubentryCount = ca.Numsubentries
dest.InflationDestination = ca.Inflationdest.String
dest.HomeDomain = ca.HomeDomain.String
dest.LastModifiedLedger = ca.LastModified
PopulateAccountFlags(&dest.Flags, ca)
PopulateAccountThresholds(&dest.Thresholds, ca)
// populate balances
dest.Balances = make([]Balance, len(ct)+1)
for i, tl := range ct {
err := PopulateBalance(&dest.Balances[i], tl)
if err != nil {
return errors.Wrap(err, "populating balance")
}
}
// add native balance
err := PopulateNativeBalance(&dest.Balances[len(dest.Balances)-1], ca.Balance, ca.BuyingLiabilities, ca.SellingLiabilities)
if err != nil {
return errors.Wrap(err, "populating native balance")
}
// populate data
dest.Data = make(map[string]string)
for _, d := range cd {
dest.Data[d.Key] = d.Value
}
// populate signers
dest.Signers = make([]Signer, len(cs)+1)
for i, s := range cs {
PopulateSigner(ctx, &dest.Signers[i], s)
}
PopulateMasterSigner(&dest.Signers[len(dest.Signers)-1], ca)
lb := hal.LinkBuilder{httpx.BaseURL(ctx)}
self := fmt.Sprintf("/accounts/%s", ca.Accountid)
dest.Links.Self = lb.Link(self)
dest.Links.Transactions = lb.PagedLink(self, "transactions")
dest.Links.Operations = lb.PagedLink(self, "operations")
dest.Links.Payments = lb.PagedLink(self, "payments")
dest.Links.Effects = lb.PagedLink(self, "effects")
dest.Links.Offers = lb.PagedLink(self, "offers")
dest.Links.Trades = lb.PagedLink(self, "trades")
dest.Links.Data = lb.Link(self, "data/{key}")
dest.Links.Data.PopulateTemplated()
return nil
}