MCPcopy Index your code
hub / github.com/ZeppelinMC/Zeppelin / encodeCompoundStruct

Method encodeCompoundStruct

protocol/nbt/encoder.go:113–354  ·  view source on GitHub ↗
(val reflect.Value)

Source from the content-addressed store, hash-verified

111}
112
113func (e *Encoder) encodeCompoundStruct(val reflect.Value) error {
114 for i := 0; i < val.NumField(); i++ {
115 tf := val.Type().Field(i)
116 f := val.Field(i)
117 if !tf.IsExported() {
118 continue
119 }
120 name := tf.Name
121 if v, ok := tf.Tag.Lookup("nbt"); ok {
122 name = v
123 }
124 if name == "-" {
125 continue
126 }
127 var omitempty bool
128
129 i := strings.Index(name, ",omitempty")
130 if i != -1 {
131 name = name[:i]
132 omitempty = true
133 }
134
135 if omitempty && f.IsZero() {
136 continue
137 }
138
139 if f.Kind() == reflect.Interface {
140 f = f.Elem()
141 }
142 switch f.Kind() {
143 case reflect.Bool:
144 if err := e.writeByte(Byte); err != nil {
145 return err
146 }
147 if err := e.writeString(name); err != nil {
148 return err
149 }
150 b := f.Bool()
151 if err := e.writeByte(*(*int8)(unsafe.Pointer(&b))); err != nil {
152 return err
153 }
154 case reflect.Int8, reflect.Uint8:
155 if err := e.writeByte(Byte); err != nil {
156 return err
157 }
158 if err := e.writeString(name); err != nil {
159 return err
160 }
161 if f.CanUint() {
162 if err := e.writeByte(int8(f.Uint())); err != nil {
163 return err
164 }
165 } else {
166 if err := e.writeByte(int8(f.Int())); err != nil {
167 return err
168 }
169 }
170 case reflect.Int16, reflect.Uint16:

Callers 3

EncodeMethod · 0.95
encodeCompoundMapMethod · 0.95
encodeListMethod · 0.95

Calls 15

writeByteMethod · 0.95
writeStringMethod · 0.95
writeShortMethod · 0.95
writeIntMethod · 0.95
writeLongMethod · 0.95
writeFloatMethod · 0.95
writeDoubleMethod · 0.95
encodeListMethod · 0.95
encodeCompoundMapMethod · 0.95
LookupMethod · 0.80
PointerMethod · 0.80
LenMethod · 0.80

Tested by

no test coverage detected