Files
ippserver/packages/ipp/enum.go

58 lines
1004 B
Go

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
}