From f3d6a01105b6c00202595dad5e5a4e6143cfd907 Mon Sep 17 00:00:00 2001 From: Haelnorr Date: Wed, 25 Feb 2026 22:01:25 +1100 Subject: [PATCH] added new way to integrate with ezconf --- ezconf/integration.go | 50 +++++++++++++++++++++++++++++++++++--- ezconf/integration_test.go | 2 +- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/ezconf/integration.go b/ezconf/integration.go index 1f84cf9..aa424e8 100644 --- a/ezconf/integration.go +++ b/ezconf/integration.go @@ -1,8 +1,24 @@ package ezconf -// Integration is an interface that packages can implement to provide +type Integration struct { + Name string + ConfigPointer any + ConfigFunc func() (any, error) + GroupName string +} + +func NewIntegration(name, groupname string, cfgptr any, cfgfunc func() (any, error)) *Integration { + return &Integration{ + name, + cfgptr, + cfgfunc, + groupname, + } +} + +// IntegrationDepr is an interface that packages can implement to provide // easy integration with ezconf -type Integration interface { +type IntegrationDepr interface { // Name returns the name to use when registering the config Name() string @@ -16,8 +32,34 @@ type Integration interface { GroupName() string } +// AddIntegration registers a package using an Integration object returned by another package +func (cl *ConfigLoader) AddIntegration(integration *Integration) error { + // Add config struct for tag parsing + configPtr := integration.ConfigPointer + if err := cl.AddConfigStruct(configPtr, integration.GroupName); err != nil { + return err + } + + // Add config function + if err := cl.AddConfigFunc(integration.Name, integration.ConfigFunc); err != nil { + return err + } + + return nil +} + +// AddIntegrations registers multiple integrations at once +func (cl *ConfigLoader) AddIntegrations(integrations ...*Integration) error { + for _, integration := range integrations { + if err := cl.AddIntegration(integration); err != nil { + return err + } + } + return nil +} + // RegisterIntegration registers a package that implements the Integration interface -func (cl *ConfigLoader) RegisterIntegration(integration Integration) error { +func (cl *ConfigLoader) RegisterIntegration(integration IntegrationDepr) error { // Add config struct for tag parsing configPtr := integration.ConfigPointer() if err := cl.AddConfigStruct(configPtr, integration.GroupName()); err != nil { @@ -33,7 +75,7 @@ func (cl *ConfigLoader) RegisterIntegration(integration Integration) error { } // RegisterIntegrations registers multiple integrations at once -func (cl *ConfigLoader) RegisterIntegrations(integrations ...Integration) error { +func (cl *ConfigLoader) RegisterIntegrations(integrations ...IntegrationDepr) error { for _, integration := range integrations { if err := cl.RegisterIntegration(integration); err != nil { return err diff --git a/ezconf/integration_test.go b/ezconf/integration_test.go index 5407831..cd7846d 100644 --- a/ezconf/integration_test.go +++ b/ezconf/integration_test.go @@ -210,5 +210,5 @@ func TestRegisterIntegrations_PartialFailure(t *testing.T) { func TestIntegration_Interface(t *testing.T) { // Verify that mockIntegration implements Integration interface - var _ Integration = (*mockIntegration)(nil) + var _ IntegrationDepr = (*mockIntegration)(nil) }