github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/status/blockchain_status.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package status 5 6 import ( 7 "encoding/json" 8 "errors" 9 "fmt" 10 11 "github.com/MetalBlockchain/metalgo/vms/components/verify" 12 ) 13 14 // List of possible blockchain status values: 15 // - [UnknownChain] This node is not aware of the existence of this blockchain 16 // - [Created] This node is not currently validating this blockchain 17 // - [Preferred] This blockchain is currently in the preferred tip 18 // - [Validating] This node is currently validating this blockchain 19 // - [Syncing] This node is syncing up to the preferred block height 20 const ( 21 UnknownChain BlockchainStatus = iota 22 Created 23 Preferred 24 Validating 25 Syncing 26 ) 27 28 var ( 29 errUnknownBlockchainStatus = errors.New("unknown blockchain status") 30 31 _ json.Marshaler = BlockchainStatus(0) 32 _ verify.Verifiable = BlockchainStatus(0) 33 _ fmt.Stringer = BlockchainStatus(0) 34 ) 35 36 type BlockchainStatus uint32 37 38 func (s BlockchainStatus) MarshalJSON() ([]byte, error) { 39 return []byte(`"` + s.String() + `"`), s.Verify() 40 } 41 42 func (s *BlockchainStatus) UnmarshalJSON(b []byte) error { 43 switch string(b) { 44 case `"Unknown"`: 45 *s = UnknownChain 46 case `"Created"`: 47 *s = Created 48 case `"Preferred"`: 49 *s = Preferred 50 case `"Validating"`: 51 *s = Validating 52 case `"Syncing"`: 53 *s = Syncing 54 case "null": 55 default: 56 return errUnknownBlockchainStatus 57 } 58 return nil 59 } 60 61 // Verify that this is a valid status. 62 func (s BlockchainStatus) Verify() error { 63 switch s { 64 case UnknownChain, Created, Preferred, Validating, Syncing: 65 return nil 66 default: 67 return errUnknownBlockchainStatus 68 } 69 } 70 71 func (s BlockchainStatus) String() string { 72 switch s { 73 case UnknownChain: 74 return "Unknown" 75 case Created: 76 return "Created" 77 case Preferred: 78 return "Preferred" 79 case Validating: 80 return "Validating" 81 case Syncing: 82 return "Syncing" 83 default: 84 return "Invalid blockchain status" 85 } 86 }