// ------------------------------------------------------------------------ // Project active2 // Active Thing (activething.com) git.activething.com/go // // File name err_format.go // Created by DEV // Modified 10/04/2024 // // Copyright 2024 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 fmtr import ( "errs/stack" "fmt" "reflect" ) type ( ErrBuilder struct { code string message string cause error trace stack.Trace } ) func NewErrBuilder(code string, cause error, message string, addTrace bool) *ErrBuilder { var tc stack.Trace if addTrace { tc = stack.MakeStackTrace(3) } return &ErrBuilder{ code : code, cause : cause, message: message, trace : tc, } } func NewErrBuilderFormat (cause error, rtype reflect.Type, addTrace bool) *ErrBuilder { return NewErrBuilder(CodeBuilderError,cause,fmt.Sprintf(fmtErrorTypeFormat,rtype.String()),addTrace) } func NewErrBuilderUnwrap (cause error, rtype reflect.Type, addTrace bool) *ErrBuilder { return NewErrBuilder(CodeBuilderError,cause,fmt.Sprintf(fmtErrorFormatUnwrap,rtype.String()),addTrace) } func NewErrBuildLevel() *ErrBuilder { return &ErrBuilder{ code : CodeBuilderLevelError} } func (e ErrBuilder) Code () string { return e.code } func (e ErrBuilder) Error() string { return e.code } func (e ErrBuilder) Cause() error { return e.cause } func (e ErrBuilder) Message() string { return e.message } func (e ErrBuilder) StackTrace () stack.Trace { return e.trace } func (e ErrBuilder) BuildFormat (builder Builder) { builder.Build(e,func (fb FieldBuilder){ if len(e.message) > 0 { fb.AddFieldString(FieldNameMessage,e.message) } }) }