From 04b6f75aed9095ef8d9ca7c63d81f4b0591fc9a4 Mon Sep 17 00:00:00 2001 From: tom twinkle <47764757+tomtwinkle@users.noreply.github.com> Date: Tue, 23 Mar 2021 16:38:09 +0900 Subject: [PATCH] Support for multibyte strings --- plugin/plugin.go | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/plugin/plugin.go b/plugin/plugin.go index 1de26e7..3576d9f 100644 --- a/plugin/plugin.go +++ b/plugin/plugin.go @@ -461,6 +461,35 @@ func (p *plugin) generateLengthValidator(variableName string, ccTypeName string, } } +func (p *plugin) generateStringLengthValidator(variableName string, ccTypeName string, fieldName string, fv *validator.FieldValidator) { + if fv.LengthGt != nil { + p.P(`if !( len([]rune(`, variableName, `)) > `, fv.LengthGt, `) {`) + p.In() + errorStr := fmt.Sprintf(`have a length greater than '%d'`, fv.GetLengthGt()) + p.generateErrorString(variableName, fieldName, errorStr, fv) + p.Out() + p.P(`}`) + } + + if fv.LengthLt != nil { + p.P(`if !( len([]rune(`, variableName, `)) < `, fv.LengthLt, `) {`) + p.In() + errorStr := fmt.Sprintf(`have a length smaller than '%d'`, fv.GetLengthLt()) + p.generateErrorString(variableName, fieldName, errorStr, fv) + p.Out() + p.P(`}`) + } + + if fv.LengthEq != nil { + p.P(`if !( len([]rune(`, variableName, `)) == `, fv.LengthEq, `) {`) + p.In() + errorStr := fmt.Sprintf(`have a length equal to '%d'`, fv.GetLengthEq()) + p.generateErrorString(variableName, fieldName, errorStr, fv) + p.Out() + p.P(`}`) + } +} + func (p *plugin) generateFloatValidator(variableName string, ccTypeName string, fieldName string, fv *validator.FieldValidator) { upperIsStrict := true lowerIsStrict := true @@ -582,7 +611,7 @@ func (p *plugin) generateStringValidator(variableName string, ccTypeName string, p.Out() p.P(`}`) } - p.generateLengthValidator(variableName, ccTypeName, fieldName, fv) + p.generateStringLengthValidator(variableName, ccTypeName, fieldName, fv) } func (p *plugin) generateRepeatedCountValidator(variableName string, ccTypeName string, fieldName string, fv *validator.FieldValidator) {