github.com/mavryk-network/mvgo@v1.19.9/mavryk/pvm.go (about)

     1  // Copyright (c) 2023 Blockwatch Data Inc.
     2  // Author: alex@blockwatch.cc
     3  
     4  package mavryk
     5  
     6  import (
     7  	"fmt"
     8  )
     9  
    10  type PvmKind byte
    11  
    12  const (
    13  	PvmKindArith     PvmKind = iota // 0
    14  	PvmKindWasm200                  // 1
    15  	PvmKindWasm200r1                // 2 v1
    16  	PvmKindWasm200r2                // 3 v2
    17  	PvmKindWasm200r3                // 4 v3
    18  	PvmKindWasm200r4                // 5 v4
    19  	PvmKindInvalid   = 255
    20  )
    21  
    22  func (t PvmKind) IsValid() bool {
    23  	return t != PvmKindInvalid
    24  }
    25  
    26  func (t *PvmKind) UnmarshalText(data []byte) error {
    27  	v := ParsePvmKind(string(data))
    28  	if !v.IsValid() {
    29  		return fmt.Errorf("tezos: invalid PVM kind '%s'", string(data))
    30  	}
    31  	*t = v
    32  	return nil
    33  }
    34  
    35  func (t PvmKind) MarshalText() ([]byte, error) {
    36  	return []byte(t.String()), nil
    37  }
    38  
    39  func ParsePvmKind(s string) PvmKind {
    40  	switch s {
    41  	case "arith":
    42  		return PvmKindArith
    43  	case "wasm_2_0_0":
    44  		return PvmKindWasm200
    45  	case "wasm_2_0_0.r1":
    46  		return PvmKindWasm200r1
    47  	case "wasm_2_0_0.r2":
    48  		return PvmKindWasm200r2
    49  	case "wasm_2_0_0.r3":
    50  		return PvmKindWasm200r3
    51  	case "wasm_2_0_0.r4":
    52  		return PvmKindWasm200r4
    53  	default:
    54  		return PvmKindInvalid
    55  	}
    56  }
    57  
    58  func (t PvmKind) String() string {
    59  	switch t {
    60  	case PvmKindArith:
    61  		return "arith"
    62  	case PvmKindWasm200:
    63  		return "wasm_2_0_0"
    64  	case PvmKindWasm200r1:
    65  		return "wasm_2_0_0.r1"
    66  	case PvmKindWasm200r2:
    67  		return "wasm_2_0_0.r2"
    68  	case PvmKindWasm200r3:
    69  		return "wasm_2_0_0.r3"
    70  	case PvmKindWasm200r4:
    71  		return "wasm_2_0_0.r4"
    72  	default:
    73  		return ""
    74  	}
    75  }