Skip to content

Commit 804ff1f

Browse files
krishankumar01kkumar-gcc
andauthored
feat: [#495] Centralize Error Messages in Framework (PR#1) (#663)
* implement errors for framework * chore: update mocks * implement errors for framework * rename contract import * add errors for session * rename location to module * chore: update mocks --------- Co-authored-by: kkumar-gcc <kkumar-gcc@users.noreply.github.com>
1 parent 2c6c7e7 commit 804ff1f

11 files changed

Lines changed: 299 additions & 18 deletions

File tree

contracts/errors/errors.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package errors
2+
3+
// Error is the interface that wraps the basic error methods
4+
type Error interface {
5+
// Args allows setting arguments for the placeholders in the text
6+
Args(...any) Error
7+
// Error implements the error interface and formats the error string
8+
Error() string
9+
// SetModule explicitly sets the module in the error message
10+
SetModule(string) Error
11+
}

errors/errors.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package errors
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
7+
contractserrors "github.com/goravel/framework/contracts/errors"
8+
)
9+
10+
type errorString struct {
11+
text string
12+
module string
13+
args []any
14+
}
15+
16+
// New creates a new error with the provided text and optional module
17+
func New(text string, module ...string) contractserrors.Error {
18+
err := &errorString{
19+
text: text,
20+
}
21+
22+
if len(module) > 0 {
23+
err.module = module[0]
24+
}
25+
26+
return err
27+
}
28+
29+
func (e *errorString) Args(args ...any) contractserrors.Error {
30+
e.args = args
31+
return e
32+
}
33+
34+
func (e *errorString) Error() string {
35+
formattedText := e.text
36+
37+
if len(e.args) > 0 {
38+
formattedText = fmt.Sprintf(e.text, e.args...)
39+
}
40+
41+
if e.module != "" {
42+
formattedText = fmt.Sprintf("[%s] %s", e.module, formattedText)
43+
}
44+
45+
return formattedText
46+
}
47+
48+
func (e *errorString) SetModule(module string) contractserrors.Error {
49+
e.module = module
50+
return e
51+
}
52+
53+
func Is(err, target error) bool {
54+
return errors.Is(err, target)
55+
}
56+
57+
func As(err error, target any) bool {
58+
return errors.As(err, &target)
59+
}
60+
61+
func Unwrap(err error) error {
62+
return errors.Unwrap(err)
63+
}

errors/list.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package errors
2+
3+
var (
4+
ErrConfigFacadeNotSet = New("config facade is not initialized")
5+
ErrJSONParserNotSet = New("JSON parser is not initialized")
6+
7+
ErrSessionNotFound = New("session [%s] not found")
8+
ErrSessionDriverIsNotSet = New("session driver is not set")
9+
ErrSessionDriverNotSupported = New("session driver [%s] not supported")
10+
ErrSessionDriverAlreadyExists = New("session driver [%s] already exists")
11+
ErrSessionDriverExtensionFailed = New("failed to extend session [%s] driver [%v]")
12+
)

errors/modules.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package errors
2+
3+
var (
4+
ModuleSession = "session"
5+
)

mocks/errors/Error.go

Lines changed: 185 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

session/driver/file.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package driver
22

33
import (
4-
"fmt"
54
"os"
65
"path/filepath"
76
"sync"
87

8+
"github.com/goravel/framework/errors"
99
"github.com/goravel/framework/support/carbon"
1010
"github.com/goravel/framework/support/file"
1111
)
@@ -80,7 +80,7 @@ func (f *File) Read(id string) (string, error) {
8080
}
8181
}
8282

83-
return "", fmt.Errorf("session [%s] not found", id)
83+
return "", errors.ErrSessionNotFound.Args(id)
8484
}
8585

8686
func (f *File) Write(id string, data string) error {

session/manager.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package session
22

33
import (
4-
"fmt"
54
"sync"
65
"time"
76

87
"github.com/goravel/framework/contracts/config"
98
"github.com/goravel/framework/contracts/foundation"
109
sessioncontract "github.com/goravel/framework/contracts/session"
10+
"github.com/goravel/framework/errors"
1111
"github.com/goravel/framework/session/driver"
1212
"github.com/goravel/framework/support/color"
1313
)
@@ -35,7 +35,7 @@ func NewManager(config config.Config, json foundation.Json) *Manager {
3535

3636
func (m *Manager) BuildSession(handler sessioncontract.Driver, sessionID ...string) (sessioncontract.Session, error) {
3737
if handler == nil {
38-
return nil, ErrDriverNotSet
38+
return nil, errors.ErrSessionDriverIsNotSet
3939
}
4040

4141
session := m.acquireSession()
@@ -60,19 +60,19 @@ func (m *Manager) Driver(name ...string) (sessioncontract.Driver, error) {
6060
}
6161

6262
if driverName == "" {
63-
return nil, fmt.Errorf("driver is not set")
63+
return nil, errors.ErrSessionDriverIsNotSet
6464
}
6565

6666
if m.drivers[driverName] == nil {
67-
return nil, fmt.Errorf("driver [%s] not supported", driverName)
67+
return nil, errors.ErrSessionDriverNotSupported.Args(driverName)
6868
}
6969

7070
return m.drivers[driverName], nil
7171
}
7272

7373
func (m *Manager) Extend(driver string, handler func() sessioncontract.Driver) error {
7474
if m.drivers[driver] != nil {
75-
return fmt.Errorf("driver [%s] already exists", driver)
75+
return errors.ErrSessionDriverAlreadyExists.Args(driver)
7676
}
7777
m.drivers[driver] = handler()
7878
m.startGcTimer(m.drivers[driver])
@@ -98,7 +98,7 @@ func (m *Manager) getDefaultDriver() string {
9898

9999
func (m *Manager) extendDefaultDrivers() {
100100
if err := m.Extend("file", m.createFileDriver); err != nil {
101-
panic(fmt.Sprintf("failed to extend session file driver: %v", err))
101+
panic(errors.ErrSessionDriverExtensionFailed.Args("file", err))
102102
}
103103
}
104104

0 commit comments

Comments
 (0)