package def_txt import ( "fmt" "strconv" "strings" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_base" "gitp78su.ipnodns.ru/svi/kern/v4/d0/defs/def_spec_fn" "gitp78su.ipnodns.ru/svi/kern/v4/d0/result" ) // MTxt -- внутренней изменяемый текст. type MTxt struct { LTxt } // MutTxt -- создать новый внутрениий изменяемый текст. func MutTxt[T def_spec_fn.TxtConstraint](msg T, arg ...any) *MTxt { sf := &MTxt{ LTxt: *LetTxt(msg, arg...), } return sf } // Concat -- создать новый изменяемый текст. func (sf *MTxt) Concat(msg any, arg ...any) def_spec_base.Txt { val := fmt.Sprintf("%v", msg) val = fmt.Sprintf(val, arg...) sf.val.WriteString(val) return def_spec_base.Txt(sf.val.String()) } // TrimSuffix -- обрезает суффикс неизменяемого текста. func (sf *MTxt) TrimSuffix[T def_spec_fn.TxtConstraint](suffix T) def_spec_base.Txt { suf := fmt.Sprintf("%v", suffix) txt := strings.TrimSuffix(sf.val.String(), suf) sf.val.WriteString(txt) return def_spec_base.Txt(sf.val.String()) } // Atoi -- устанавливает и возвращает возможное число. func (sf MTxt) Atoi() *result.Result[def_spec_base.Num] { iRes, err := strconv.Atoi(sf.String()) if err != nil { err := fmt.Errorf("LetTxt.Atot(): val(%q) not Int, err=\n\t%w", sf.String(), err) return result.ResErr[def_spec_base.Num](err) } sf.val.Reset() sf.val.WriteString(fmt.Sprintf("%v", iRes)) return result.ResOk(def_spec_base.Num(iRes)) } // Set -- изменение внутренней строки. func (sf *MTxt) Set[T def_spec_fn.TxtConstraint](msg T, arg ...any) { _msg := fmt.Sprintf(string(msg), arg...) sf.val.Reset() sf.val.WriteString(_msg) } // Let -- возвращает неизменяемую копию себя func (sf *MTxt) Let() *LTxt { return LetTxt(sf.val.String()) }