-
Notifications
You must be signed in to change notification settings - Fork 2
/
token_standard.go
68 lines (60 loc) · 2.39 KB
/
token_standard.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
package token_metadata
import "github.com/portto/solana-go-sdk/program/metaplex/token_metadata"
// TokenStandard represents the standard of a token.
type TokenStandard string
// String returns the string representation of the token standard.
func (s TokenStandard) String() string {
if !s.Valid() {
return string(TokenStandardUndefined)
}
return string(s)
}
// Valid returns true if the token standard is valid.
func (s TokenStandard) Valid() bool {
return s == TokenStandardNonFungible ||
s == TokenStandardNonFungibleEdition ||
s == TokenStandardFungibleAsset ||
s == TokenStandardFungible ||
s == TokenStandardProgrammableNonFungible
}
// ToSystemTokenStandard returns the system token standard.
func (s TokenStandard) ToSystemTokenStandard() token_metadata.TokenStandard {
switch s {
case TokenStandardNonFungible:
return token_metadata.NonFungible
case TokenStandardProgrammableNonFungible:
return token_metadata.ProgrammableNonFungible
case TokenStandardNonFungibleEdition:
return token_metadata.NonFungibleEdition
case TokenStandardFungibleAsset:
return token_metadata.FungibleAsset
case TokenStandardFungible:
return token_metadata.Fungible
default:
return token_metadata.NonFungible
}
}
// Token standards enum
const (
TokenStandardUndefined TokenStandard = "undefined"
TokenStandardNonFungible TokenStandard = "non_fungible"
TokenStandardNonFungibleEdition TokenStandard = "non_fungible_edition"
TokenStandardFungibleAsset TokenStandard = "fungible_asset"
TokenStandardFungible TokenStandard = "fungible"
TokenStandardProgrammableNonFungible TokenStandard = "programmable_non_fungible"
)
// TokenStandardMap is a map of token_metadata.TokenStandard to TokenStandard.
var tokenStandardsMap = map[token_metadata.TokenStandard]TokenStandard{
token_metadata.NonFungible: TokenStandardNonFungible,
token_metadata.NonFungibleEdition: TokenStandardNonFungibleEdition,
token_metadata.FungibleAsset: TokenStandardFungibleAsset,
token_metadata.Fungible: TokenStandardFungible,
token_metadata.ProgrammableNonFungible: TokenStandardProgrammableNonFungible,
}
// CastToTokenStandard casts token_metadata.TokenStandard to TokenStandard.
func CastToTokenStandard(s token_metadata.TokenStandard) TokenStandard {
if v, ok := tokenStandardsMap[s]; ok {
return v
}
return TokenStandardUndefined
}