diff --git a/datadictionary/datadictionary.go b/datadictionary/datadictionary.go index 218439497..9227a9c34 100644 --- a/datadictionary/datadictionary.go +++ b/datadictionary/datadictionary.go @@ -3,10 +3,9 @@ package datadictionary import ( "encoding/xml" + "fmt" "io" "os" - - "github.com/pkg/errors" ) // DataDictionary models FIX messages, components, and fields. @@ -304,7 +303,7 @@ func Parse(path string) (*DataDictionary, error) { var err error xmlFile, err = os.Open(path) if err != nil { - return nil, errors.Wrapf(err, "problem opening file: %v", path) + return nil, fmt.Errorf("problem opening file: %s: %w", path, err) } defer xmlFile.Close() @@ -320,7 +319,7 @@ func ParseSrc(xmlSrc io.Reader) (*DataDictionary, error) { } if err := decoder.Decode(doc); err != nil { - return nil, errors.Wrapf(err, "problem parsing XML file") + return nil, fmt.Errorf("problem parsing XML file: %w", err) } b := new(builder) diff --git a/go.mod b/go.mod index e4b091c04..1f51b9823 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,6 @@ go 1.23 require ( github.com/mattn/go-sqlite3 v1.14.22 github.com/pires/go-proxyproto v0.7.0 - github.com/pkg/errors v0.9.1 github.com/quagmt/udecimal v1.8.0 github.com/shopspring/decimal v1.4.0 github.com/stretchr/testify v1.9.0 diff --git a/go.sum b/go.sum index 478e37d12..cbb36b7e7 100644 --- a/go.sum +++ b/go.sum @@ -19,8 +19,6 @@ github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v6 github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/pires/go-proxyproto v0.7.0 h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs= github.com/pires/go-proxyproto v0.7.0/go.mod h1:Vz/1JPY/OACxWGQNIRY2BeyDmpoaWmEP40O9LbuiFR4= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/quagmt/udecimal v1.8.0 h1:d4MJNGb/dg8r03AprkeSiDlVKtkZnL10L3de/YGOiiI= diff --git a/internal/time_range.go b/internal/time_range.go index e52bf55bb..fa44c5579 100644 --- a/internal/time_range.go +++ b/internal/time_range.go @@ -1,9 +1,9 @@ package internal import ( + "errors" + "fmt" "time" - - "github.com/pkg/errors" ) // TimeOfDay represents the time of day. @@ -27,7 +27,7 @@ func NewTimeOfDay(hour, minute, second int) TimeOfDay { func ParseTimeOfDay(str string) (TimeOfDay, error) { t, err := time.Parse(shortForm, str) if err != nil { - return TimeOfDay{}, errors.Wrap(err, "time must be in the format HH:MM:SS") + return TimeOfDay{}, fmt.Errorf("time must be in the format HH:MM:SS: %w", err) } return NewTimeOfDay(t.Clock()), nil diff --git a/log/mongo/mongo_log.go b/log/mongo/mongo_log.go index 253e6bdb9..dfb460a51 100644 --- a/log/mongo/mongo_log.go +++ b/log/mongo/mongo_log.go @@ -21,7 +21,6 @@ import ( "log" "time" - "github.com/pkg/errors" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -214,7 +213,7 @@ func (l *mongoLog) close() error { if l.db != nil { err := l.db.Disconnect(context.Background()) if err != nil { - return errors.Wrap(err, "error disconnecting from database") + return fmt.Errorf("error disconnecting from database: %w", err) } l.db = nil } diff --git a/memory_store.go b/memory_store.go index 7c57ca783..d9c3bab08 100644 --- a/memory_store.go +++ b/memory_store.go @@ -16,9 +16,8 @@ package quickfix import ( + "fmt" "time" - - "github.com/pkg/errors" ) type memoryStore struct { @@ -122,7 +121,7 @@ type memoryStoreFactory struct{} func (f memoryStoreFactory) Create(_ SessionID) (MessageStore, error) { m := new(memoryStore) if err := m.Reset(); err != nil { - return m, errors.Wrap(err, "reset") + return m, fmt.Errorf("reset: %w", err) } return m, nil } diff --git a/session_factory.go b/session_factory.go index effe6ed35..1f650f9c9 100644 --- a/session_factory.go +++ b/session_factory.go @@ -16,13 +16,13 @@ package quickfix import ( + "errors" + "fmt" "net" "strconv" "strings" "time" - "github.com/pkg/errors" - "github.com/quickfixgo/quickfix/config" "github.com/quickfixgo/quickfix/datadictionary" "github.com/quickfixgo/quickfix/internal" @@ -132,17 +132,17 @@ func (f sessionFactory) newSession( } if s.transportDataDictionary, err = datadictionary.Parse(transportDataDictionaryPath); err != nil { - err = errors.Wrapf( - err, "problem parsing XML datadictionary path '%v' for setting '%v", - settings.settings[config.TransportDataDictionary], config.TransportDataDictionary, + err = fmt.Errorf( + "problem parsing XML datadictionary path '%v' for setting '%v': %w", + settings.settings[config.TransportDataDictionary], config.TransportDataDictionary, err, ) return } if s.appDataDictionary, err = datadictionary.Parse(appDataDictionaryPath); err != nil { - err = errors.Wrapf( - err, "problem parsing XML datadictionary path '%v' for setting '%v", - settings.settings[config.AppDataDictionary], config.AppDataDictionary, + err = fmt.Errorf( + "problem parsing XML datadictionary path '%v' for setting '%v': %w", + settings.settings[config.AppDataDictionary], config.AppDataDictionary, err, ) return } @@ -156,9 +156,9 @@ func (f sessionFactory) newSession( } if s.appDataDictionary, err = datadictionary.Parse(dataDictionaryPath); err != nil { - err = errors.Wrapf( - err, "problem parsing XML datadictionary path '%v' for setting '%v", - settings.settings[config.DataDictionary], config.DataDictionary, + err = fmt.Errorf( + "problem parsing XML datadictionary path '%v' for setting '%v': %w", + settings.settings[config.DataDictionary], config.DataDictionary, err, ) return } @@ -245,17 +245,17 @@ func (f sessionFactory) newSession( var start, end internal.TimeOfDay if start, err = internal.ParseTimeOfDay(startTimeStr); err != nil { - err = errors.Wrapf( - err, "problem parsing time of day '%v' for setting '%v", - settings.settings[config.StartTime], config.StartTime, + err = fmt.Errorf( + "problem parsing time of day '%v' for setting '%v': %w", + settings.settings[config.StartTime], config.StartTime, err, ) return } if end, err = internal.ParseTimeOfDay(endTimeStr); err != nil { - err = errors.Wrapf( - err, "problem parsing time of day '%v' for setting '%v", - settings.settings[config.EndTime], config.EndTime, + err = fmt.Errorf( + "problem parsing time of day '%v' for setting '%v': %w", + settings.settings[config.EndTime], config.EndTime, err, ) return } @@ -269,9 +269,9 @@ func (f sessionFactory) newSession( loc, err = time.LoadLocation(locStr) if err != nil { - err = errors.Wrapf( - err, "problem parsing time zone '%v' for setting '%v", - settings.settings[config.TimeZone], config.TimeZone, + err = fmt.Errorf( + "problem parsing time zone '%v' for setting '%v': %w", + settings.settings[config.TimeZone], config.TimeZone, err, ) return } diff --git a/store/file/file_store.go b/store/file/file_store.go index 04bced51a..7d1d47179 100644 --- a/store/file/file_store.go +++ b/store/file/file_store.go @@ -16,6 +16,7 @@ package file import ( + "errors" "fmt" "io" "os" @@ -25,7 +26,6 @@ import ( "sync" "time" - "github.com/pkg/errors" "github.com/quickfixgo/quickfix" "github.com/quickfixgo/quickfix/config" ) @@ -96,7 +96,7 @@ func newFileStore(sessionID quickfix.SessionID, dirname string, fileSync bool) ( memStore, memErr := quickfix.NewMemoryStoreFactory().Create(sessionID) if memErr != nil { - return nil, errors.Wrap(memErr, "cache creation") + return nil, fmt.Errorf("cache creation: %w", memErr) } store := &fileStore{ @@ -120,11 +120,11 @@ func newFileStore(sessionID quickfix.SessionID, dirname string, fileSync bool) ( // Reset deletes the store files and sets the seqnums back to 1. func (store *fileStore) Reset() error { if err := store.cache.Reset(); err != nil { - return errors.Wrap(err, "cache reset") + return fmt.Errorf("cache reset: %w", err) } if err := store.Close(); err != nil { - return errors.Wrap(err, "close") + return fmt.Errorf("close: %w", err) } if err := removeFile(store.bodyFname); err != nil { return err @@ -147,7 +147,7 @@ func (store *fileStore) Reset() error { // Refresh closes the store files and then reloads from them. func (store *fileStore) Refresh() (err error) { if err = store.cache.Reset(); err != nil { - err = errors.Wrap(err, "cache reset") + err = fmt.Errorf("cache reset: %w", err) return } @@ -183,11 +183,11 @@ func (store *fileStore) Refresh() (err error) { } if err := store.SetNextSenderMsgSeqNum(store.NextSenderMsgSeqNum()); err != nil { - return errors.Wrap(err, "set next sender") + return fmt.Errorf("set next sender: %w", err) } if err := store.SetNextTargetMsgSeqNum(store.NextTargetMsgSeqNum()); err != nil { - return errors.Wrap(err, "set next target") + return fmt.Errorf("set next target: %w", err) } return nil } @@ -204,7 +204,7 @@ func (store *fileStore) populateCache() (creationTimePopulated bool, err error) if senderSeqNumBytes, err := os.ReadFile(store.senderSeqNumsFname); err == nil { if senderSeqNum, err := strconv.Atoi(strings.Trim(string(senderSeqNumBytes), "\r\n")); err == nil { if err = store.cache.SetNextSenderMsgSeqNum(senderSeqNum); err != nil { - return creationTimePopulated, errors.Wrap(err, "cache set next sender") + return creationTimePopulated, fmt.Errorf("cache set next sender: %w", err) } } } @@ -212,7 +212,7 @@ func (store *fileStore) populateCache() (creationTimePopulated bool, err error) if targetSeqNumBytes, err := os.ReadFile(store.targetSeqNumsFname); err == nil { if targetSeqNum, err := strconv.Atoi(strings.Trim(string(targetSeqNumBytes), "\r\n")); err == nil { if err = store.cache.SetNextTargetMsgSeqNum(targetSeqNum); err != nil { - return creationTimePopulated, errors.Wrap(err, "cache set next target") + return creationTimePopulated, fmt.Errorf("cache set next target: %w", err) } } } @@ -273,7 +273,7 @@ func (store *fileStore) NextTargetMsgSeqNum() int { // SetNextSenderMsgSeqNum sets the next MsgSeqNum that will be sent. func (store *fileStore) SetNextSenderMsgSeqNum(next int) error { if err := store.setSeqNum(store.senderSeqNumsFile, next); err != nil { - return errors.Wrap(err, "file") + return fmt.Errorf("file: %w", err) } return store.cache.SetNextSenderMsgSeqNum(next) } @@ -281,7 +281,7 @@ func (store *fileStore) SetNextSenderMsgSeqNum(next int) error { // SetNextTargetMsgSeqNum sets the next MsgSeqNum that should be received. func (store *fileStore) SetNextTargetMsgSeqNum(next int) error { if err := store.setSeqNum(store.targetSeqNumsFile, next); err != nil { - return errors.Wrap(err, "file") + return fmt.Errorf("file: %w", err) } return store.cache.SetNextTargetMsgSeqNum(next) } @@ -289,7 +289,7 @@ func (store *fileStore) SetNextTargetMsgSeqNum(next int) error { // IncrNextSenderMsgSeqNum increments the next MsgSeqNum that will be sent. func (store *fileStore) IncrNextSenderMsgSeqNum() error { if err := store.SetNextSenderMsgSeqNum(store.cache.NextSenderMsgSeqNum() + 1); err != nil { - return errors.Wrap(err, "file") + return fmt.Errorf("file: %w", err) } return nil } @@ -297,7 +297,7 @@ func (store *fileStore) IncrNextSenderMsgSeqNum() error { // IncrNextTargetMsgSeqNum increments the next MsgSeqNum that should be received. func (store *fileStore) IncrNextTargetMsgSeqNum() error { if err := store.SetNextTargetMsgSeqNum(store.cache.NextTargetMsgSeqNum() + 1); err != nil { - return errors.Wrap(err, "file") + return fmt.Errorf("file: %w", err) } return nil } diff --git a/store/file/util.go b/store/file/util.go index 9baf380f6..b4a3642b8 100644 --- a/store/file/util.go +++ b/store/file/util.go @@ -20,7 +20,6 @@ import ( "os" "strings" - "github.com/pkg/errors" "github.com/quickfixgo/quickfix" ) @@ -68,7 +67,7 @@ func closeSyncFile(f *os.File) error { // removeFile behaves like os.Remove, except that no error is returned if the file does not exist. func removeFile(fname string) error { if err := os.Remove(fname); (err != nil) && !os.IsNotExist(err) { - return errors.Wrapf(err, "remove %v", fname) + return fmt.Errorf("remove %v: %w", fname, err) } return nil } diff --git a/store/mongo/mongo_store.go b/store/mongo/mongo_store.go index 42696388e..638aa7f12 100644 --- a/store/mongo/mongo_store.go +++ b/store/mongo/mongo_store.go @@ -20,7 +20,6 @@ import ( "fmt" "time" - "github.com/pkg/errors" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -92,7 +91,7 @@ func newMongoStore(sessionID quickfix.SessionID, mongoURL, mongoDatabase, mongoR memStore, memErr := quickfix.NewMemoryStoreFactory().Create(sessionID) if memErr != nil { - err = errors.Wrap(memErr, "cache creation") + err = fmt.Errorf("cache creation: %w", memErr) return } @@ -108,7 +107,7 @@ func newMongoStore(sessionID quickfix.SessionID, mongoURL, mongoDatabase, mongoR } if err = store.cache.Reset(); err != nil { - err = errors.Wrap(err, "cache reset") + err = fmt.Errorf("cache reset: %w", err) return } @@ -190,23 +189,23 @@ func (store *mongoStore) populateCache() error { msgFilter := generateMessageFilter(&store.sessionID) res := store.db.Database(store.mongoDatabase).Collection(store.sessionsCollection).FindOne(context.Background(), msgFilter) if res.Err() != nil && res.Err() != mongo.ErrNoDocuments { - return errors.Wrap(res.Err(), "query") + return fmt.Errorf("query: %w", res.Err()) } if res.Err() != mongo.ErrNoDocuments { // session record found, load it sessionData := &mongoQuickFixEntryData{} if err := res.Decode(&sessionData); err != nil { - return errors.Wrap(err, "decode") + return fmt.Errorf("decode: %w", err) } store.cache.SetCreationTime(sessionData.CreationTime) if err := store.cache.SetNextTargetMsgSeqNum(sessionData.IncomingSeqNum); err != nil { - return errors.Wrap(err, "cache set next target") + return fmt.Errorf("cache set next target: %w", err) } if err := store.cache.SetNextSenderMsgSeqNum(sessionData.OutgoingSeqNum); err != nil { - return errors.Wrap(err, "cache set next sender") + return fmt.Errorf("cache set next sender: %w", err) } return nil @@ -218,7 +217,7 @@ func (store *mongoStore) populateCache() error { msgFilter.OutgoingSeqNum = store.cache.NextSenderMsgSeqNum() if _, err := store.db.Database(store.mongoDatabase).Collection(store.sessionsCollection).InsertOne(context.Background(), msgFilter); err != nil { - return errors.Wrap(err, "insert") + return fmt.Errorf("insert: %w", err) } return nil } @@ -262,7 +261,7 @@ func (store *mongoStore) SetNextTargetMsgSeqNum(next int) error { // IncrNextSenderMsgSeqNum increments the next MsgSeqNum that will be sent. func (store *mongoStore) IncrNextSenderMsgSeqNum() error { if err := store.SetNextSenderMsgSeqNum(store.cache.NextSenderMsgSeqNum() + 1); err != nil { - return errors.Wrap(err, "save sequence number") + return fmt.Errorf("save sequence number: %w", err) } return nil } @@ -270,7 +269,7 @@ func (store *mongoStore) IncrNextSenderMsgSeqNum() error { // IncrNextTargetMsgSeqNum increments the next MsgSeqNum that should be received. func (store *mongoStore) IncrNextTargetMsgSeqNum() error { if err := store.SetNextTargetMsgSeqNum(store.cache.NextTargetMsgSeqNum() + 1); err != nil { - return errors.Wrap(err, "save sequence number") + return fmt.Errorf("save sequence number: %w", err) } return nil } @@ -385,7 +384,7 @@ func (store *mongoStore) Close() error { if store.db != nil { err := store.db.Disconnect(context.Background()) if err != nil { - return errors.Wrap(err, "error disconnecting from database") + return fmt.Errorf("error disconnecting from database: %w", err) } store.db = nil } diff --git a/store/sql/sql_store.go b/store/sql/sql_store.go index aeaeb6eb3..4bbb61558 100644 --- a/store/sql/sql_store.go +++ b/store/sql/sql_store.go @@ -21,8 +21,6 @@ import ( "regexp" "time" - "github.com/pkg/errors" - "github.com/quickfixgo/quickfix" "github.com/quickfixgo/quickfix/config" ) @@ -102,7 +100,7 @@ func newSQLStore(sessionID quickfix.SessionID, driver string, dataSourceName str memStore, memErr := quickfix.NewMemoryStoreFactory().Create(sessionID) if memErr != nil { - err = errors.Wrap(memErr, "cache creation") + err = fmt.Errorf("cache creation: %w", memErr) return } @@ -114,7 +112,7 @@ func newSQLStore(sessionID quickfix.SessionID, driver string, dataSourceName str sqlConnMaxLifetime: connMaxLifetime, } if err = store.cache.Reset(); err != nil { - err = errors.Wrap(err, "cache reset") + err = fmt.Errorf("cache reset: %w", err) return } @@ -195,10 +193,10 @@ func (store *sqlStore) populateCache() error { if err == nil { store.cache.SetCreationTime(creationTime) if err = store.cache.SetNextTargetMsgSeqNum(incomingSeqNum); err != nil { - return errors.Wrap(err, "cache set next target") + return fmt.Errorf("cache set next target: %w", err) } if err = store.cache.SetNextSenderMsgSeqNum(outgoingSeqNum); err != nil { - return errors.Wrap(err, "cache set next sender") + return fmt.Errorf("cache set next sender: %w", err) } return nil } @@ -270,7 +268,7 @@ func (store *sqlStore) SetNextTargetMsgSeqNum(next int) error { // IncrNextSenderMsgSeqNum increments the next MsgSeqNum that will be sent. func (store *sqlStore) IncrNextSenderMsgSeqNum() error { if err := store.SetNextSenderMsgSeqNum(store.cache.NextSenderMsgSeqNum() + 1); err != nil { - return errors.Wrap(err, "store next") + return fmt.Errorf("store next: %w", err) } return nil } @@ -278,7 +276,7 @@ func (store *sqlStore) IncrNextSenderMsgSeqNum() error { // IncrNextTargetMsgSeqNum increments the next MsgSeqNum that should be received. func (store *sqlStore) IncrNextTargetMsgSeqNum() error { if err := store.SetNextTargetMsgSeqNum(store.cache.NextTargetMsgSeqNum() + 1); err != nil { - return errors.Wrap(err, "store next") + return fmt.Errorf("store next: %w", err) } return nil }