createFieldGetter creates a getter function for a struct field
(field reflect.StructField, fieldIndex int)
| 372 | |
| 373 | // createFieldGetter creates a getter function for a struct field |
| 374 | func createFieldGetter(field reflect.StructField, fieldIndex int) ClassGetterFunc { |
| 375 | return func(ctx *Context, this *Value) *Value { |
| 376 | objValue, err := getValidObjectValue(ctx, this) |
| 377 | if err != nil { |
| 378 | return ctx.ThrowError(err) |
| 379 | } |
| 380 | |
| 381 | // In our implementation, fieldIndex is always valid since it comes from |
| 382 | // the loop in addReflectionAccessors, and fieldValue is always valid |
| 383 | // for exported fields that we bind |
| 384 | fieldValue := objValue.Field(fieldIndex) |
| 385 | |
| 386 | jsValue, err := ctx.Marshal(fieldValue.Interface()) |
| 387 | if err != nil { |
| 388 | return ctx.ThrowError(fmt.Errorf("failed to marshal field %s: %w", field.Name, err)) |
| 389 | } |
| 390 | return jsValue |
| 391 | } |
| 392 | } |
| 393 | |
| 394 | // createFieldSetter creates a setter function for a struct field |
| 395 | func createFieldSetter(field reflect.StructField, fieldIndex int) ClassSetterFunc { |
no test coverage detected