| 160 | } |
| 161 | |
| 162 | func (s *optionalSerializer) valueField(value reflect.Value) reflect.Value { |
| 163 | value = s.unwrap(value) |
| 164 | if !value.IsValid() { |
| 165 | return reflect.New(s.valueType).Elem() |
| 166 | } |
| 167 | if value.CanAddr() { |
| 168 | ptr := unsafe.Add(unsafe.Pointer(value.UnsafeAddr()), s.valueOffset) |
| 169 | return reflect.NewAt(s.valueType, ptr).Elem() |
| 170 | } |
| 171 | field := value.FieldByName("value") |
| 172 | if field.IsValid() { |
| 173 | return field |
| 174 | } |
| 175 | return reflect.New(s.valueType).Elem() |
| 176 | } |
| 177 | |
| 178 | func (s *optionalSerializer) setHas(value reflect.Value, has bool) { |
| 179 | value = s.unwrap(value) |