(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool)
| 853 | } |
| 854 | |
| 855 | func (e encoder) encodeJSONMarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) { |
| 856 | v := reflect.NewAt(t, p) |
| 857 | |
| 858 | if !pointer { |
| 859 | v = v.Elem() |
| 860 | } |
| 861 | |
| 862 | switch v.Kind() { |
| 863 | case reflect.Ptr, reflect.Interface: |
| 864 | if v.IsNil() { |
| 865 | return append(b, "null"...), nil |
| 866 | } |
| 867 | } |
| 868 | |
| 869 | j, err := v.Interface().(Marshaler).MarshalJSON() |
| 870 | if err != nil { |
| 871 | return b, err |
| 872 | } |
| 873 | |
| 874 | d := decoder{} |
| 875 | s, _, _, err := d.parseValue(j) |
| 876 | if err != nil { |
| 877 | return b, &MarshalerError{Type: t, Err: err} |
| 878 | } |
| 879 | |
| 880 | if (e.flags & EscapeHTML) != 0 { |
| 881 | return appendCompactEscapeHTML(b, s), nil |
| 882 | } |
| 883 | |
| 884 | return append(b, s...), nil |
| 885 | } |
| 886 | |
| 887 | func (e encoder) encodeTextMarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) { |
| 888 | v := reflect.NewAt(t, p) |
no test coverage detected