mirror of
https://github.com/json-iterator/go.git
synced 2025-04-20 11:28:49 +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 {
|
||||
api.marshalFloatWith6Digits()
|
||||
}
|
||||
encoderExtension := EncoderExtension{}
|
||||
if cfg.EscapeHTML {
|
||||
api.escapeHTML()
|
||||
api.escapeHTML(encoderExtension)
|
||||
}
|
||||
if cfg.UseNumber {
|
||||
api.useNumber()
|
||||
@ -83,6 +84,9 @@ func (cfg Config) Froze() API {
|
||||
if cfg.ValidateJsonRawMessage {
|
||||
api.validateJsonRawMessage()
|
||||
}
|
||||
if len(encoderExtension) > 0 {
|
||||
api.extensions = append(api.extensions, encoderExtension)
|
||||
}
|
||||
api.configBeforeFrozen = cfg
|
||||
return api
|
||||
}
|
||||
@ -178,8 +182,8 @@ func (encoder *htmlEscapedStringEncoder) IsEmpty(ptr unsafe.Pointer) bool {
|
||||
return *((*string)(ptr)) == ""
|
||||
}
|
||||
|
||||
func (cfg *frozenConfig) escapeHTML() {
|
||||
cfg.addEncoderToCache(reflect.TypeOf((*string)(nil)).Elem(), &htmlEscapedStringEncoder{})
|
||||
func (cfg *frozenConfig) escapeHTML(encoderExtension EncoderExtension) {
|
||||
encoderExtension[reflect.TypeOf((*string)(nil)).Elem()] = &htmlEscapedStringEncoder{}
|
||||
}
|
||||
|
||||
func (cfg *frozenConfig) cleanDecoders() {
|
||||
|
@ -80,6 +80,32 @@ func (extension *DummyExtension) DecorateEncoder(typ reflect.Type, encoder ValEn
|
||||
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 {
|
||||
fun DecoderFunc
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user