Skip to main content

provider.go

provider.go - Overview

  1. Overview This file defines interfaces and functions for creating and managing providers in a generic way. It includes definitions for Provider, ProviderFactory, and related helper functions to instantiate providers from a named map of factories.

  2. Detailed Documentation

Type Provider

type Provider = any
  • Purpose: Type alias for any, representing a generic provider.

Type NewProviderFunc

type NewProviderFunc[P Provider, C Config] func(context.Context, ProviderSettings, C) (P, error)
  • Purpose: Defines a function signature for creating a new provider.
    • Parameters:
      • context.Context: Context for the function call.
      • ProviderSettings: Settings related to the provider.
      • C: Configuration for the provider.
    • Returns:
      • P: The created provider.
      • error: An error if the provider creation fails.

Interface ProviderFactory

type ProviderFactory[P Provider, C Config] interface {
Named
New(context.Context, ProviderSettings, C) (P, error)
}
  • Purpose: Defines an interface for a factory that creates providers.
    • Methods:
      • Named: Interface to get the name of the factory.
      • New: Creates a new provider.
        • Parameters:
          • context.Context: Context for the function call.
          • ProviderSettings: Settings related to the provider.
          • C: Configuration for the provider.
        • Returns:
          • P: The created provider.
          • error: An error if the provider creation fails.

Type providerFactory

type providerFactory[P Provider, C Config] struct {
name Name
newProviderFunc NewProviderFunc[P, C]
}
  • Purpose: Concrete implementation of the ProviderFactory interface.
    • Fields:
      • name: The name of the factory.
      • newProviderFunc: The function used to create new providers.

Function (*providerFactory).Name

func (factory *providerFactory[P, C]) Name() Name {
return factory.name
}
  • Purpose: Returns the name of the provider factory.
    • Returns:
      • Name: The name of the factory.

Function (*providerFactory).New

func (factory *providerFactory[P, C]) New(ctx context.Context, settings ProviderSettings, config C) (p P, err error) {
provider, err := factory.newProviderFunc(ctx, settings, config)
if err != nil {
return
}

p = provider
return
}
  • Purpose: Creates a new provider using the factory's newProviderFunc.
    • Parameters:
      • ctx: Context for the function call.
      • settings: Settings related to the provider.
      • config: Configuration for the provider.
    • Returns:
      • P: The created provider.
      • error: An error if the provider creation fails.

Function NewProviderFactory

func NewProviderFactory[P Provider, C Config](name Name, newProviderFunc NewProviderFunc[P, C]) ProviderFactory[P, C] {
return &providerFactory[P, C]{
name: name,
newProviderFunc: newProviderFunc,
}
}
  • Purpose: Creates a new ProviderFactory.
    • Parameters:
      • name: The name of the factory.
      • newProviderFunc: The function used to create new providers.
    • Returns:
      • ProviderFactory[P, C]: The created provider factory.

Function NewProviderFromNamedMap

func NewProviderFromNamedMap[P Provider, C Config](ctx context.Context, settings ProviderSettings, config C, factories NamedMap[ProviderFactory[P, C]], key string) (p P, err error) {
providerFactory, err := factories.Get(key)
if err != nil {
return
}

provider, err := providerFactory.New(ctx, settings, config)
if err != nil {
return
}

p = provider
return
}
  • Purpose: Creates a new provider from a named map of factories based on the input key.
    • Parameters:
      • ctx: Context for the function call.
      • settings: Settings related to the provider.
      • config: Configuration for the provider.
      • factories: A named map of ProviderFactory.
      • key: The key to lookup the factory in the map.
    • Returns:
      • P: The created provider.
      • error: An error if the factory is not found or if provider creation fails.

Include in Getting Started: NO