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  }