/* --------------------------------------------------------- Project activething Active Thing (activething.com) git.activething.com/go File name err_info.go Created by DEV Modified 23/10/2023 Copyright 2023 activething.com --------------------------------------------------------- // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // */ package errs import ( "activething.com/go/gogo/core/opts" "bytes" "time" ) type ( // ErrInfo // Representa un objeto para añadir una capa de información addicional a un error // ErrInfo struct { /*embedded*/ error date time.Time source string help string message string link string details map[string]any stack StackTrace } ) func NewErrInfo(err error, options ...opts.OptionFnc[ErrInfo]) *ErrInfo { if err == nil { return nil } return opts.Apply(&ErrInfo{error: err}, options...) } func (i ErrInfo) Message() string { return i.message } func (i ErrInfo) Source() string { return i.source } func (i ErrInfo) Help() string { return i.help } func (i ErrInfo) Link() string { return i.link } func (i ErrInfo) Stack() StackTrace { if i.stack != nil { return i.stack } return getStackTrace(i.Cause()) } func (i ErrInfo) Details() map[string]any { return i.Details() } func (i ErrInfo) Cause() error { if cs, is := i.error.(Causer); is { return cs.Cause() } return Unwrap(i.error) } func (i ErrInfo) Unwrap() error { return i.Cause() } func (i ErrInfo) Date() time.Time { return i.date } func (i ErrInfo) Error () (res string) { bf := bytes.Buffer{} defer bf.Reset() bf.WriteString(i.error.Error()) if len(i.message) > 0 { bf.WriteString("\nmessage: ") bf.WriteString(i.message) } if len(i.source) > 0 { bf.WriteString("\nsource: ") bf.WriteString(i.source) } //todo //if !i.date.IsZero() { // bf.WriteString("\nTime: ") // bf.WriteTime(i.date) //} if i.stack != nil { bf.WriteString("\nStack: ") bf.WriteString(i.stack.String()) } res = bf.String() return res } /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: I HAVE NO DESIRE TO WALK ON WATER," SAID SIDDHARTA. "LET THE OLD SHRAMANAS SATISFY THEMSELVES WITH SUCH SKILLS. SIDDHARTA - HERMANN HESSE - ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */