package ipp import ( "encoding/binary" "io" ) type enum struct { name string value uint16 } func NewEnum(name string, value uint16) *enum { e := new(enum) e.name = name e.value = value return e } func (e enum) String() string { return e.name + ":" + string(e.value) } func (e *enum) valueTag() tag { return enumValueTag } func (e *enum) unmarshal(byteStream io.Reader) { //e.name, e.value = unmarshalSingleValue(byteStream) } func (e *enum) marshal() []byte { l := 3 + len(e.name) + 6 b := make([]byte, l, l) p := 0 b[0] = byte(enumValueTag) p += 1 binary.BigEndian.PutUint16(b[p:p+2], uint16(len(e.name))) p += 2 copy(b[p:], []byte(e.name)) p += len(e.name) binary.BigEndian.PutUint16(b[p:p+2], uint16(4)) p += 2 binary.BigEndian.PutUint32(b[p:p+4], uint32(e.value)) return b } func (e *enum) size() int { l := 1 + 4 // The attribute tag + 2 lengths l += len(e.name) l += 4 return l }