(new): expand runtime APIs
(fix): harden concurrent lifecycle (tests): add regression coverage (doc): update v1.2 guidance
This commit is contained in:
+27
-18
@@ -119,8 +119,11 @@ func (v *richValidator) text(text tgapi.RichText, depth int) error {
|
||||
case tgapi.RichTextPlain:
|
||||
return v.addChars(string(el))
|
||||
case tgapi.RichTextArray:
|
||||
if depth >= maxRichDepth {
|
||||
return ErrRichNestingTooDeep
|
||||
}
|
||||
for _, item := range el {
|
||||
if err := v.text(item, depth); err != nil {
|
||||
if err := v.text(item, depth+1); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -176,7 +179,7 @@ func (v *richValidator) text(text tgapi.RichText, depth int) error {
|
||||
}
|
||||
|
||||
func validateAutomaticEntity(text tgapi.RichText, semantic string) error {
|
||||
visible, err := visibleRichText(text)
|
||||
visible, err := visibleRichText(text, 0)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -186,16 +189,22 @@ func validateAutomaticEntity(text tgapi.RichText, semantic string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func visibleRichText(text tgapi.RichText) (string, error) {
|
||||
func visibleRichText(text tgapi.RichText, depth int) (string, error) {
|
||||
if depth > maxRichDepth {
|
||||
return "", ErrRichNestingTooDeep
|
||||
}
|
||||
switch el := text.(type) {
|
||||
case nil:
|
||||
return "", nil
|
||||
case tgapi.RichTextPlain:
|
||||
return string(el), nil
|
||||
case tgapi.RichTextArray:
|
||||
if depth >= maxRichDepth {
|
||||
return "", ErrRichNestingTooDeep
|
||||
}
|
||||
var result strings.Builder
|
||||
for _, item := range el {
|
||||
part, err := visibleRichText(item)
|
||||
part, err := visibleRichText(item, depth+1)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@@ -209,33 +218,33 @@ func visibleRichText(text tgapi.RichText) (string, error) {
|
||||
case tgapi.RichTextAnchor:
|
||||
return "", nil
|
||||
case tgapi.RichTextWrap:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextURL:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextEmailAddress:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextPhoneNumber:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextBankCardNumber:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextMention:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextHashtag:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextCashtag:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextBotCommand:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextAnchorLink:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextReference:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextReferenceLink:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextDateTime:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
case tgapi.RichTextTextMention:
|
||||
return visibleRichText(el.Text)
|
||||
return visibleRichText(el.Text, depth+1)
|
||||
default:
|
||||
return "", ErrRichUnknownTag
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user