// package def_mut_txt -- изменяемая строка package def_mut_txt import ( "fmt" "strconv" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_mut" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/def_spec_fn" ) // MutTxt -- алиас для внутренней изменяемой строки. type MutTxt struct { *def_mut.Mut[def_spec.ATxt] } // NewMutTxt -- создать новую мутабельную строку. func NewMutTxt[T def_spec.TxtConstraint](msg T, arg ...any) *MutTxt { _txt := def_spec.Sprintf(msg, arg...) sf := &MutTxt{ Mut: def_mut.NewMut(_txt), } return sf } // Concat -- создать новую строку. func (sf *MutTxt) Concat(msg any, arg ...any) def_spec.ATxt { val := def_spec.Sprintf("%v", msg) val = def_spec.Sprintf(val, arg...) sf.Set(sf.Get() + val) return sf.Get() } // TrimSuffix -- обрезает суффикс строки. func (sf *MutTxt) TrimSuffix(suffix any) def_spec.ATxt { suf := fmt.Sprintf("%v", suffix) txt := def_spec_fn.TrimSuffix(sf.Get(), suf) return def_spec.ATxt(txt) } // Rune -- возвращает внутреннюю строку в виде рун. func (sf MutTxt) Rune() []rune { return []rune(sf.Get()) } // Byte -- возвращает внутреннюю строку в виде байтов. func (sf MutTxt) Byte() []byte { return []byte(sf.Get()) } // Len -- возвращает длину строки. func (sf MutTxt) Len() def_spec.Int { return def_spec.Int(len(sf.Get())) } // String -- возвращает строку по требованию. func (sf MutTxt) String() string { return string(sf.Get()) } // Atoi -- возвращает возможное число. func (sf MutTxt) Atoi() *def_spec.Result[def_spec.Int] { 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 def_spec.NewErr[def_spec.Int](err) } return def_spec.NewOk(def_spec.Int(iRes)) }