Fix encoding of type which implemented MarshalJSON

This commit is contained in:
Masaaki Goshima 2021-01-30 01:14:22 +09:00
parent 2558d4399f
commit 84c8b84671
4 changed files with 195 additions and 100 deletions

View File

@ -268,11 +268,13 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
0, 0,
) )
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { //TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(append(b, buf.Bytes()...), ',') b = buf.Bytes()
b = encodeComma(b)
code = code.next code = code.next
case opMarshalText: case opMarshalText:
ptr := load(ctxptr, code.idx) ptr := load(ctxptr, code.idx)
@ -6632,11 +6634,12 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
0, 0,
) )
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { //TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -6667,11 +6670,12 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
0, 0,
) )
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { //TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -6864,12 +6868,13 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
} }
code = code.nextField code = code.nextField
} else { } else {
var buf bytes.Buffer b = append(b, code.key...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
//TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -6909,12 +6914,13 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
} }
code = code.nextField code = code.nextField
} else { } else {
var buf bytes.Buffer b = append(b, code.key...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
//TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -7131,9 +7137,10 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
code = code.nextField code = code.nextField
} else { } else {
var buf bytes.Buffer var buf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...)
b = encodeNoEscapedString(b, buf.String()) b = encodeNoEscapedString(b, buf.String())
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
@ -7174,7 +7181,7 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
code = code.nextField code = code.nextField
} else { } else {
var buf bytes.Buffer var buf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = append(b, code.key...)
@ -7818,11 +7825,12 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { //TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldStringTagMarshalJSON: case opStructFieldStringTagMarshalJSON:
@ -7834,7 +7842,7 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var buf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = append(b, code.key...)
@ -7853,12 +7861,13 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer b = append(b, code.key...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
//TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -9258,11 +9267,12 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { //TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndOmitEmptyMarshalJSON: case opStructEndOmitEmptyMarshalJSON:
@ -9274,12 +9284,13 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer b = append(b, code.key...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
//TODO: we should validate buffer with `compact`
if err := compact(buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1
@ -9300,7 +9311,7 @@ func (e *Encoder) run(ctx *encodeRuntimeContext, b []byte, codeSet *opcodeSet) (
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var buf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&buf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, code.key...) b = append(b, code.key...)

View File

@ -231,11 +231,12 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
0, 0,
) )
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(append(b, buf.Bytes()...), ',') b = buf.Bytes()
b = encodeComma(b)
code = code.next code = code.next
case opMarshalText: case opMarshalText:
ptr := load(ctxptr, code.idx) ptr := load(ctxptr, code.idx)
@ -6599,11 +6600,11 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
0, 0,
) )
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -6634,11 +6635,11 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
0, 0,
) )
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -6831,12 +6832,12 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
} }
code = code.nextField code = code.nextField
} else { } else {
var buf bytes.Buffer b = append(b, code.escapedKey...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, code.escapedKey...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -6876,12 +6877,12 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
} }
code = code.nextField code = code.nextField
} else { } else {
var buf bytes.Buffer b = append(b, code.escapedKey...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, code.escapedKey...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
} }
@ -7804,11 +7805,11 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = encodeComma(b) b = encodeComma(b)
code = code.next code = code.next
case opStructFieldOmitEmptyMarshalJSON: case opStructFieldOmitEmptyMarshalJSON:
@ -7823,12 +7824,12 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer b = append(b, code.escapedKey...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, code.escapedKey...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = encodeComma(b) b = encodeComma(b)
} }
code = code.next code = code.next
@ -9244,11 +9245,11 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer buf := bytes.NewBuffer(b)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = buf.Bytes()
b = appendStructEnd(b) b = appendStructEnd(b)
code = code.next code = code.next
case opStructEndOmitEmptyMarshalJSON: case opStructEndOmitEmptyMarshalJSON:
@ -9260,12 +9261,12 @@ func (e *Encoder) runEscaped(ctx *encodeRuntimeContext, b []byte, codeSet *opcod
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer b = append(b, code.escapedKey...)
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { buf := bytes.NewBuffer(b)
if err := compact(buf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, code.escapedKey...) b = buf.Bytes()
b = append(b, buf.Bytes()...)
b = appendStructEnd(b) b = appendStructEnd(b)
} else { } else {
last := len(b) - 1 last := len(b) - 1

View File

@ -8,6 +8,7 @@ import (
"reflect" "reflect"
"runtime" "runtime"
"sort" "sort"
"strings"
"unsafe" "unsafe"
) )
@ -232,16 +233,20 @@ func (e *Encoder) runEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet
0, 0,
) )
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&compactBuf, bb, true); err != nil {
return nil, err
}
var indentBuf bytes.Buffer
if err := encodeWithIndent( if err := encodeWithIndent(
&buf, &indentBuf,
bb, compactBuf.Bytes(),
string(e.prefix)+string(bytes.Repeat(e.indentStr, e.baseIndent+code.indent)), string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr), string(e.indentStr),
); err != nil { ); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = append(b, indentBuf.Bytes()...)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opMarshalText: case opMarshalText:
@ -7619,11 +7624,20 @@ func (e *Encoder) runEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = append(b, indentBuf.Bytes()...)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldStringTagMarshalJSON: case opStructFieldStringTagMarshalJSON:
@ -7637,11 +7651,21 @@ func (e *Encoder) runEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, true); err != nil {
return nil, err return nil, err
} }
b = encodeEscapedString(b, buf.String()) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = append(b, indentBuf.Bytes()...)
b = encodeEscapedString(b, indentBuf.String())
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldStringTagMarshalText: case opStructFieldStringTagMarshalText:
@ -9189,11 +9213,20 @@ func (e *Encoder) runEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, true); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = append(b, indentBuf.Bytes()...)
b = e.appendStructEndIndent(b, code.indent-1) b = e.appendStructEndIndent(b, code.indent-1)
code = code.next code = code.next
case opStructEndStringTagMarshalJSON: case opStructEndStringTagMarshalJSON:
@ -9207,11 +9240,20 @@ func (e *Encoder) runEscapedIndent(ctx *encodeRuntimeContext, b []byte, codeSet
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, true); err != nil {
return nil, err return nil, err
} }
b = encodeEscapedString(b, buf.String()) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = encodeEscapedString(b, indentBuf.String())
b = e.appendStructEndIndent(b, code.indent-1) b = e.appendStructEndIndent(b, code.indent-1)
code = code.next code = code.next
case opStructEndStringTagMarshalText: case opStructEndStringTagMarshalText:

View File

@ -8,6 +8,7 @@ import (
"reflect" "reflect"
"runtime" "runtime"
"sort" "sort"
"strings"
"unsafe" "unsafe"
) )
@ -232,16 +233,20 @@ func (e *Encoder) runIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
0, 0,
) )
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&compactBuf, bb, false); err != nil {
return nil, err
}
var indentBuf bytes.Buffer
if err := encodeWithIndent( if err := encodeWithIndent(
&buf, &indentBuf,
bb, compactBuf.Bytes(),
string(e.prefix)+string(bytes.Repeat(e.indentStr, e.baseIndent+code.indent)), string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr), string(e.indentStr),
); err != nil { ); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) b = append(b, indentBuf.Bytes()...)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opMarshalText: case opMarshalText:
@ -7619,11 +7624,20 @@ func (e *Encoder) runIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = append(b, indentBuf.Bytes()...)
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldStringTagMarshalJSON: case opStructFieldStringTagMarshalJSON:
@ -7637,11 +7651,20 @@ func (e *Encoder) runIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, false); err != nil {
return nil, err return nil, err
} }
b = encodeNoEscapedString(b, buf.String()) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = encodeNoEscapedString(b, indentBuf.String())
b = encodeIndentComma(b) b = encodeIndentComma(b)
code = code.next code = code.next
case opStructFieldStringTagMarshalText: case opStructFieldStringTagMarshalText:
@ -9189,11 +9212,20 @@ func (e *Encoder) runIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, false); err != nil {
return nil, err return nil, err
} }
b = append(b, buf.Bytes()...) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = append(b, indentBuf.Bytes()...)
b = e.appendStructEndIndent(b, code.indent-1) b = e.appendStructEndIndent(b, code.indent-1)
code = code.next code = code.next
case opStructEndStringTagMarshalJSON: case opStructEndStringTagMarshalJSON:
@ -9207,11 +9239,20 @@ func (e *Encoder) runIndent(ctx *encodeRuntimeContext, b []byte, codeSet *opcode
if err != nil { if err != nil {
return nil, errMarshaler(code, err) return nil, errMarshaler(code, err)
} }
var buf bytes.Buffer var compactBuf bytes.Buffer
if err := compact(&buf, bb, e.enabledHTMLEscape); err != nil { if err := compact(&compactBuf, bb, false); err != nil {
return nil, err return nil, err
} }
b = encodeNoEscapedString(b, buf.String()) var indentBuf bytes.Buffer
if err := encodeWithIndent(
&indentBuf,
compactBuf.Bytes(),
string(e.prefix)+strings.Repeat(string(e.indentStr), e.baseIndent+code.indent),
string(e.indentStr),
); err != nil {
return nil, err
}
b = encodeNoEscapedString(b, indentBuf.String())
b = e.appendStructEndIndent(b, code.indent-1) b = e.appendStructEndIndent(b, code.indent-1)
code = code.next code = code.next
case opStructEndStringTagMarshalText: case opStructEndStringTagMarshalText: