From ef359d5145fa947a86193463cc420ddad7ed149a Mon Sep 17 00:00:00 2001 From: Christopher Trueb Date: Wed, 11 Dec 2024 13:49:50 +0100 Subject: [PATCH 1/5] feat: added MustConnect and NATSServers function --- connection.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/connection.go b/connection.go index 549b527..1f04eb2 100644 --- a/connection.go +++ b/connection.go @@ -2,6 +2,9 @@ package vnats import ( "fmt" + "log/slog" + "os" + "strings" "github.com/nats-io/nats.go" ) @@ -29,6 +32,13 @@ type LogFunc func(format string, a ...interface{}) // NoLogging is the default LogFunc. It logs nothing. var NoLogging = func(_ string, _ ...interface{}) {} +type Config struct { + Password string + Username string + Hosts string + Port int +} + // Connection is the main entry point for the library. It is used to create Publishers and Subscribers. // It is also used to close the connection to the NATS server/ cluster. type Connection struct { @@ -139,3 +149,38 @@ func WithLogger(log LogFunc) Option { c.log = log } } + +// MustConnectToNATS to NATS Server. This function panics if the connection could not be established. +// servers: List of NATS servers in the form of "nats://@:" +// logger: an optional slog.Logger instance +func (c *Connection) MustConnectToNATS(servers []string, logger *slog.Logger) *Connection { + if logger == nil { + logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{})) + } + natsConn, err := Connect(servers, WithLogger(logger.Info)) + if err != nil { + panic("error while connecting to nats: " + err.Error()) + } + return natsConn +} + +// NATSServers returns a list of NATS servers in the form of "nats://@:" +func NATSServers(cfg *Config) []string { + parsedServers := trimSpaceSlice(strings.Split(cfg.Hosts, ",")) + servers := make([]string, 0, len(parsedServers)) + + for _, server := range parsedServers { + s := fmt.Sprintf("nats://%s:%s@%s:%d", cfg.Username, cfg.Password, server, cfg.Port) + servers = append(servers, s) + } + + return servers +} + +func trimSpaceSlice(values []string) []string { + trimmed := make([]string, len(values)) + for i, value := range values { + trimmed[i] = strings.TrimSpace(value) + } + return trimmed +} From a26ac45fc61d36ac3caf79b5b338e36ed10002ca Mon Sep 17 00:00:00 2001 From: Christopher Trueb Date: Wed, 11 Dec 2024 13:56:25 +0100 Subject: [PATCH 2/5] feat: Added comment to Config --- connection.go | 1 + 1 file changed, 1 insertion(+) diff --git a/connection.go b/connection.go index 1f04eb2..a288d4a 100644 --- a/connection.go +++ b/connection.go @@ -32,6 +32,7 @@ type LogFunc func(format string, a ...interface{}) // NoLogging is the default LogFunc. It logs nothing. var NoLogging = func(_ string, _ ...interface{}) {} +// Config is a struct to hold the configuration of a NATS connection. type Config struct { Password string Username string From 2aeadc1c0ac2d9499a7672c1facd3a66e346c987 Mon Sep 17 00:00:00 2001 From: Christopher Trueb Date: Wed, 11 Dec 2024 14:29:24 +0100 Subject: [PATCH 3/5] feat: removed interface from mustconnect --- connection.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connection.go b/connection.go index a288d4a..f95c1b9 100644 --- a/connection.go +++ b/connection.go @@ -154,7 +154,7 @@ func WithLogger(log LogFunc) Option { // MustConnectToNATS to NATS Server. This function panics if the connection could not be established. // servers: List of NATS servers in the form of "nats://@:" // logger: an optional slog.Logger instance -func (c *Connection) MustConnectToNATS(servers []string, logger *slog.Logger) *Connection { +func MustConnectToNATS(servers []string, logger *slog.Logger) *Connection { if logger == nil { logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{})) } From 3d2cc652ec2cb39a22ecc0913dca432f9bf37fa7 Mon Sep 17 00:00:00 2001 From: Christopher Trueb Date: Wed, 11 Dec 2024 14:35:31 +0100 Subject: [PATCH 4/5] feat: removed NATSServers; MustConnect takes a config --- connection.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/connection.go b/connection.go index f95c1b9..45d4d39 100644 --- a/connection.go +++ b/connection.go @@ -154,19 +154,18 @@ func WithLogger(log LogFunc) Option { // MustConnectToNATS to NATS Server. This function panics if the connection could not be established. // servers: List of NATS servers in the form of "nats://@:" // logger: an optional slog.Logger instance -func MustConnectToNATS(servers []string, logger *slog.Logger) *Connection { +func MustConnectToNATS(config *Config, logger *slog.Logger) *Connection { if logger == nil { logger = slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{})) } - natsConn, err := Connect(servers, WithLogger(logger.Info)) + natsConn, err := Connect(servers(config), WithLogger(logger.Info)) if err != nil { panic("error while connecting to nats: " + err.Error()) } return natsConn } -// NATSServers returns a list of NATS servers in the form of "nats://@:" -func NATSServers(cfg *Config) []string { +func servers(cfg *Config) []string { parsedServers := trimSpaceSlice(strings.Split(cfg.Hosts, ",")) servers := make([]string, 0, len(parsedServers)) From 824ff7e21641f997c51d191157ef2bbe1a990897 Mon Sep 17 00:00:00 2001 From: Christopher Trueb Date: Thu, 12 Dec 2024 10:44:33 +0100 Subject: [PATCH 5/5] fix: removed unused parameters --- bridge.go | 2 +- subscriber_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bridge.go b/bridge.go index 864bc8a..f45d8f2 100644 --- a/bridge.go +++ b/bridge.go @@ -23,7 +23,7 @@ func newNATSBridge(servers []string, log LogFunc) (*natsBridge, error) { url := strings.Join(servers, ",") nb.connection, err = nats.Connect(url, - nats.DisconnectErrHandler(func(nc *nats.Conn, err error) { + nats.DisconnectErrHandler(func(_ *nats.Conn, err error) { log("Got disconnected: %v", err) }), nats.ReconnectHandler(func(nc *nats.Conn) { diff --git a/subscriber_test.go b/subscriber_test.go index 893c675..fffed61 100644 --- a/subscriber_test.go +++ b/subscriber_test.go @@ -377,7 +377,7 @@ func TestSubscriberMultiple(t *testing.T) { } func makeHandlerSubscriber(t *testing.T, alwaysFail bool, s *subscriptionState, idx int) func(msg Msg) error { - handler := func(msg Msg) error { + handler := func(_ Msg) error { if alwaysFail { s.FailedMsgs++ t.Logf("Subscriber %v: Failed msg handeling, failesp: %v", idx, s.FailedMsgs)