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 }