54 lines
923 B
Go
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
|
|
}
|