package ipp import ( "bytes" "encoding/binary" "fmt" "io" log "github.com/sirupsen/logrus" ) type enum struct { name string value int32 } func NewEnum(name string, value int32) *enum { e := new(enum) e.name = name e.value = value return e } func (e enum) Name() string { return e.name } func (e enum) String() string { return e.name + ":" + fmt.Sprint(e.value) } func (e *enum) valueTag() tag { return enumValueTag } func (e *enum) unmarshal(byteStream io.Reader) { log.Warn("Unmarshal of enum is not implemented yet") } func (e *enum) marshal() []byte { l := 3 + len(e.name) + 6 b := make([]byte, 0, l) buf := bytes.NewBuffer(b) buf.WriteByte(byte(enumValueTag)) binary.Write(buf, binary.BigEndian, uint16(len(e.name))) buf.WriteString(e.name) binary.Write(buf, binary.BigEndian, uint16(4)) binary.Write(buf, binary.BigEndian, e.value) return buf.Bytes() } func (e *enum) size() int { l := 1 + 4 // The attribute tag + 2 lengths l += len(e.name) l += 4 return l }