github.com/MetalBlockchain/metalgo@v1.11.9/utils/compression/type.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package compression 5 6 import ( 7 "errors" 8 "strings" 9 ) 10 11 var errUnknownCompressionType = errors.New("unknown compression type") 12 13 type Type byte 14 15 const ( 16 TypeNone Type = iota + 1 17 TypeZstd 18 ) 19 20 func (t Type) String() string { 21 switch t { 22 case TypeNone: 23 return "none" 24 case TypeZstd: 25 return "zstd" 26 default: 27 return "unknown" 28 } 29 } 30 31 func TypeFromString(s string) (Type, error) { 32 switch s { 33 case TypeNone.String(): 34 return TypeNone, nil 35 case TypeZstd.String(): 36 return TypeZstd, nil 37 default: 38 return TypeNone, errUnknownCompressionType 39 } 40 } 41 42 func (t Type) MarshalJSON() ([]byte, error) { 43 var b strings.Builder 44 if _, err := b.WriteString(`"`); err != nil { 45 return nil, err 46 } 47 if _, err := b.WriteString(t.String()); err != nil { 48 return nil, err 49 } 50 if _, err := b.WriteString(`"`); err != nil { 51 return nil, err 52 } 53 return []byte(b.String()), nil 54 }