1package playlistfs23import (4 "fmt"5 "strconv"6)78type Volume struct {9 Levels []uint10}1112func VolCmd(buf []byte) (*Volume, error) {13 var vol Volume1415 fields, err := parseFields(buf, 2, -1)16 if err != nil {17 return nil, err18 }1920 for _, field := range fields {21 for i := 0; i < len(field); i++ {22 data := field[i]23 switch i {24 case 0:25 if data != "volume" {26 return nil, ErrNoVol27 }28 default:29 lvl, err := strconv.ParseUint(field[i], 10, 8)30 if err != nil {31 return nil, err32 } else if lvl > 100 {33 return nil, ErrInvalidVol34 }3536 vol.Levels = append(vol.Levels, uint(lvl))37 }38 }39 }4041 return &vol, nil42}4344func (v *Volume) String() string {45 numLvls := len(v.Levels)46 if numLvls == 1 {47 return fmt.Sprintf("volume %d", v.Levels[0])48 }4950 var lvlSet string51 for i, lvl := range v.Levels {52 lvlSet += fmt.Sprintf("%d", lvl)53 if i != numLvls {54 lvlSet += " "55 }56 }5758 return fmt.Sprintf("volume '%s'", lvlSet)59}