mirror of
https://github.com/json-iterator/go.git
synced 2025-06-06 22:36:25 +02:00
use extension to implement EscapeHtml config option
This commit is contained in:
parent
ef3038593b
commit
2074f25bd3
@ -74,8 +74,9 @@ func (cfg Config) Froze() API {
|
|||||||
if cfg.MarshalFloatWith6Digits {
|
if cfg.MarshalFloatWith6Digits {
|
||||||
api.marshalFloatWith6Digits()
|
api.marshalFloatWith6Digits()
|
||||||
}
|
}
|
||||||
|
encoderExtension := EncoderExtension{}
|
||||||
if cfg.EscapeHTML {
|
if cfg.EscapeHTML {
|
||||||
api.escapeHTML()
|
api.escapeHTML(encoderExtension)
|
||||||
}
|
}
|
||||||
if cfg.UseNumber {
|
if cfg.UseNumber {
|
||||||
api.useNumber()
|
api.useNumber()
|
||||||
@ -83,6 +84,9 @@ func (cfg Config) Froze() API {
|
|||||||
if cfg.ValidateJsonRawMessage {
|
if cfg.ValidateJsonRawMessage {
|
||||||
api.validateJsonRawMessage()
|
api.validateJsonRawMessage()
|
||||||
}
|
}
|
||||||
|
if len(encoderExtension) > 0 {
|
||||||
|
api.extensions = append(api.extensions, encoderExtension)
|
||||||
|
}
|
||||||
api.configBeforeFrozen = cfg
|
api.configBeforeFrozen = cfg
|
||||||
return api
|
return api
|
||||||
}
|
}
|
||||||
@ -178,8 +182,8 @@ func (encoder *htmlEscapedStringEncoder) IsEmpty(ptr unsafe.Pointer) bool {
|
|||||||
return *((*string)(ptr)) == ""
|
return *((*string)(ptr)) == ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *frozenConfig) escapeHTML() {
|
func (cfg *frozenConfig) escapeHTML(encoderExtension EncoderExtension) {
|
||||||
cfg.addEncoderToCache(reflect.TypeOf((*string)(nil)).Elem(), &htmlEscapedStringEncoder{})
|
encoderExtension[reflect.TypeOf((*string)(nil)).Elem()] = &htmlEscapedStringEncoder{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *frozenConfig) cleanDecoders() {
|
func (cfg *frozenConfig) cleanDecoders() {
|
||||||
|
@ -80,6 +80,32 @@ func (extension *DummyExtension) DecorateEncoder(typ reflect.Type, encoder ValEn
|
|||||||
return encoder
|
return encoder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type EncoderExtension map[reflect.Type]ValEncoder
|
||||||
|
|
||||||
|
// UpdateStructDescriptor No-op
|
||||||
|
func (extension EncoderExtension) UpdateStructDescriptor(structDescriptor *StructDescriptor) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateDecoder No-op
|
||||||
|
func (extension EncoderExtension) CreateDecoder(typ reflect.Type) ValDecoder {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateEncoder get encoder from map
|
||||||
|
func (extension EncoderExtension) CreateEncoder(typ reflect.Type) ValEncoder {
|
||||||
|
return extension[typ]
|
||||||
|
}
|
||||||
|
|
||||||
|
// DecorateDecoder No-op
|
||||||
|
func (extension EncoderExtension) DecorateDecoder(typ reflect.Type, decoder ValDecoder) ValDecoder {
|
||||||
|
return decoder
|
||||||
|
}
|
||||||
|
|
||||||
|
// DecorateEncoder No-op
|
||||||
|
func (extension EncoderExtension) DecorateEncoder(typ reflect.Type, encoder ValEncoder) ValEncoder {
|
||||||
|
return encoder
|
||||||
|
}
|
||||||
|
|
||||||
type funcDecoder struct {
|
type funcDecoder struct {
|
||||||
fun DecoderFunc
|
fun DecoderFunc
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user