feat: Implement Publisher

This commit is contained in:
rupinder-syngh
2025-03-19 19:51:53 +05:30
parent 1be9d9e289
commit ed046d9ce4
9 changed files with 580 additions and 1 deletions

View File

@@ -15,6 +15,7 @@ type Config struct {
Root string `yaml:"root"`
Signer PluginConfig `yaml:"signer"`
Verifier PluginConfig `yaml:"verifier"`
Publisher PluginConfig `yaml:"publisher"`
}
// PluginConfig represents configuration details for a plugin.
@@ -27,6 +28,7 @@ type PluginConfig struct {
type Manager struct {
sp definition.SignerProvider
vp definition.VerifierProvider
pb definition.PublisherProvider
cfg *Config
}
@@ -42,13 +44,19 @@ func NewManager(ctx context.Context, cfg *Config) (*Manager, error) {
return nil, fmt.Errorf("failed to load signer plugin: %w", err)
}
// Load publisher plugin
pb, err := provider[definition.PublisherProvider](cfg.Root, cfg.Publisher.ID)
if err != nil {
return nil, fmt.Errorf("failed to load publisher plugin: %w", err)
}
// Load verifier plugin
vp, err := provider[definition.VerifierProvider](cfg.Root, cfg.Verifier.ID)
if err != nil {
return nil, fmt.Errorf("failed to load Verifier plugin: %w", err)
}
return &Manager{sp: sp, vp: vp, cfg: cfg}, nil
return &Manager{sp: sp, vp: vp, pb: pb, cfg: cfg}, nil
}
// provider loads a plugin dynamically and retrieves its provider instance.
@@ -106,3 +114,16 @@ func (m *Manager) Verifier(ctx context.Context) (definition.Verifier, func() err
}
return Verifier, close, nil
}
// Publisher retrieves the publisher plugin instance.
func (m *Manager) Publisher(ctx context.Context) (definition.Publisher, error) {
if m.pb == nil {
return nil, fmt.Errorf("publisher plugin provider not loaded")
}
publisher, err := m.pb.New(ctx, m.cfg.Publisher.Config)
if err != nil {
return nil, fmt.Errorf("failed to initialize publisher: %w", err)
}
return publisher, nil
}