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