1package moduledeps
2
3import (
4	"github.com/hashicorp/terraform-plugin-sdk/internal/plugin/discovery"
5)
6
7// Providers describes a set of provider dependencies for a given module.
8//
9// Each named provider instance can have one version constraint.
10type Providers map[ProviderInstance]ProviderDependency
11
12// ProviderDependency describes the dependency for a particular provider
13// instance, including both the set of allowed versions and the reason for
14// the dependency.
15type ProviderDependency struct {
16	Constraints discovery.Constraints
17	Reason      ProviderDependencyReason
18}
19
20// ProviderDependencyReason is an enumeration of reasons why a dependency might be
21// present.
22type ProviderDependencyReason int
23
24const (
25	// ProviderDependencyExplicit means that there is an explicit "provider"
26	// block in the configuration for this module.
27	ProviderDependencyExplicit ProviderDependencyReason = iota
28
29	// ProviderDependencyImplicit means that there is no explicit "provider"
30	// block but there is at least one resource that uses this provider.
31	ProviderDependencyImplicit
32
33	// ProviderDependencyInherited is a special case of
34	// ProviderDependencyImplicit where a parent module has defined a
35	// configuration for the provider that has been inherited by at least one
36	// resource in this module.
37	ProviderDependencyInherited
38
39	// ProviderDependencyFromState means that this provider is not currently
40	// referenced by configuration at all, but some existing instances in
41	// the state still depend on it.
42	ProviderDependencyFromState
43)
44