// package defs -- предметные типы ядра. package defs import ( "fmt" ) // "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/stream_name" // Int -- алиас для int. type Int int // Int -- возвращает целое число по требованию. func (i Int) Int() int { return int(i) } // ITxtFix -- интерфейс к фиксированной внутренней строке. type ITxtFix interface { // Get -- возвращает внутреннюю строку Get() ATxt // String -- возвращает строку String() string // Len -- возвращает длину внутренней строки Len() Int // Byte -- возвращает внутреннюю строку в виде байтов. Byte() []byte // Rune -- возвращает внутреннюю строку в виде рун. Rune() []rune } // ITxtMut -- интерфейс к изменяемой внутренней строке. type ITxtMut interface { ITxtFix // Set -- устанавливает внутреннюю строку Set(ATxt) } // ATxt -- алиас для внутренней строки. type ATxt string // KTxt -- алиас для внутренней строки. type KTxt struct { val ATxt } // TxtConstraint -- разрешает string и любые типы на его основе (например, ATxt). type TxtConstraint interface { ~string } // Txt -- создать новую строку. func Txt[T TxtConstraint](msg T, arg ...any) *KTxt { _msg := fmt.Sprintf(string(msg), arg...) sf := &KTxt{ val: ATxt(_msg), } return sf } // TxtFix -- создать новую строку. func TxtFix(msg ATxt, arg ...any) ITxtFix { sf := Txt(msg, arg...) return sf } // TxtMut -- создать новую мутабельную строку. func TxtMut(msg ATxt, arg ...any) ITxtMut { _msg := fmt.Sprintf(string(msg), arg...) sf := &KTxt{ val: ATxt(_msg), } return sf } // Get -- возвращает внутреннюю строку. func (sf KTxt) Get() ATxt { return sf.val } // Set -- изменение внутренней строки func (sf *KTxt) Set(msg ATxt) { sf.val = msg } // Rune -- возвращает внутреннюю строку в виде рун. func (sf KTxt) Rune() []rune { return []rune(sf.val) } // Byte -- возвращает внутреннюю строку в виде байтов. func (sf KTxt) Byte() []byte { return []byte(sf.val) } // Len -- возвращает длину строки. func (sf KTxt) Len() Int { return Int(len(sf.val)) } // String -- возвращает строку по требованию. func (sf KTxt) String() string { return string(sf.val) } // IErr -- алиас для error. type IErr interface { error ITxtFix // IsErr -- возвращает true, если ошибка. IsErr() bool } // KErr -- обёрнутая ошибка. type KErr struct { err error } // Err -- создать новую обёрнутую ошибку. func Err(msg ATxt, arg ...any) IErr { err := fmt.Errorf(string(msg), arg...) return &KErr{err} } // WrapErr -- возвращает обёрнутую ошибку. func WrapErr(err error) IErr { return &KErr{err} } // Rune -- возвращает внутреннюю строку в виде рун. func (e *KErr) Rune() []rune { return []rune(e.err.Error()) } // Byte -- возвращает байты из ошибки. func (e *KErr) Byte() []byte { return []byte(e.err.Error()) } // IsErr -- возвращает true, если ошибка. func (e *KErr) IsErr() bool { return e.err != nil } // String -- возвращает строковое представление ошибки. func (e *KErr) String() string { return e.err.Error() } // Error -- возвращает хранимую ошибку. func (e *KErr) Error() string { return e.err.Error() } // Get -- возвращает строку по требованию для ошибки. func (e *KErr) Get() ATxt { return ATxt(e.err.Error()) } // Len -- возвращает длину ошибки. func (e *KErr) Len() Int { return Int(len(e.err.Error())) } // ITimeFix -- метка времени. // Вывод: "2006-01-02 15:04:05.000 -07 MST". type ITimeFix ITxtFix // BucketName -- имя сущности. type BucketName KTxt // StreamName -- имя потока для ожидания. // type StreamName = stream_name.AStreamName // NewStreamName -- создать новое имя потока. // func NewStreamName(val Str) *stream_name.AStreamName { // return stream_name.NewAStreamName(val) // }