Files
ippserver/packages/ipp/enum.go
2020-12-23 23:21:47 +01:00

54 lines
923 B
Go

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
}