-
Notifications
You must be signed in to change notification settings - Fork 2
/
asset.go
46 lines (41 loc) · 1.17 KB
/
asset.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
package build
import (
"github.com/digitalbitsorg/go/support/errors"
"github.com/digitalbitsorg/go/xdr"
)
// MustXDR is the panicky version of ToXDR
func (a Asset) MustXDR() xdr.Asset {
ret, err := a.ToXDR()
if err != nil {
panic(err)
}
return ret
}
// ToXDR creates xdr.Asset object from build.Asset object
func (a Asset) ToXDR() (xdr.Asset, error) {
if a.Native {
return xdr.NewAsset(xdr.AssetTypeAssetTypeNative, nil)
}
var issuer xdr.AccountId
err := setAccountId(a.Issuer, &issuer)
if err != nil {
return xdr.Asset{}, err
}
length := len(a.Code)
switch {
case length >= 1 && length <= 4:
var codeArray [4]byte
byteArray := []byte(a.Code)
copy(codeArray[:], byteArray[0:length])
asset := xdr.AssetAlphaNum4{AssetCode: codeArray, Issuer: issuer}
return xdr.NewAsset(xdr.AssetTypeAssetTypeCreditAlphanum4, asset)
case length >= 5 && length <= 12:
var codeArray [12]byte
byteArray := []byte(a.Code)
copy(codeArray[:], byteArray[0:length])
asset := xdr.AssetAlphaNum12{AssetCode: codeArray, Issuer: issuer}
return xdr.NewAsset(xdr.AssetTypeAssetTypeCreditAlphanum12, asset)
default:
return xdr.Asset{}, errors.New("Asset code length is invalid")
}
}