| 176 | } |
| 177 | |
| 178 | func (s *optionalSerializer) setHas(value reflect.Value, has bool) { |
| 179 | value = s.unwrap(value) |
| 180 | if !value.IsValid() { |
| 181 | return |
| 182 | } |
| 183 | if value.CanAddr() { |
| 184 | hasPtr := (*bool)(unsafe.Add(unsafe.Pointer(value.UnsafeAddr()), s.hasOffset)) |
| 185 | *hasPtr = has |
| 186 | return |
| 187 | } |
| 188 | field := value.FieldByName("has") |
| 189 | if field.IsValid() && field.CanSet() { |
| 190 | field.SetBool(has) |
| 191 | } |
| 192 | } |
| 193 | |
| 194 | func (s *optionalSerializer) Write(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value) { |
| 195 | if !s.has(value) { |