generated from hashicorp/terraform-provider-scaffolding
/
registry.go
72 lines (55 loc) · 2.13 KB
/
registry.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package registry
import (
"context"
"sync"
"github.com/hashicorp/terraform-plugin-framework/datasource"
"github.com/hashicorp/terraform-plugin-framework/resource"
)
var dataSourceRegistrationClosed bool
var dataSourceRegistry map[string]func(context.Context) (datasource.DataSource, error)
var dataSourceRegistryMu sync.Mutex
var resourceRegistrationClosed bool
var resourceRegistry map[string]func(context.Context) (resource.Resource, error)
var resourceRegistryMu sync.Mutex
// AddDataSourceFactory registers the specified data source type name and factory.
func AddDataSourceFactory(name string, factory func(context.Context) (datasource.DataSource, error)) {
dataSourceRegistryMu.Lock()
defer dataSourceRegistryMu.Unlock()
if dataSourceRegistrationClosed {
panic("Data Source registration is closed")
}
if dataSourceRegistry == nil {
dataSourceRegistry = make(map[string]func(context.Context) (datasource.DataSource, error))
}
dataSourceRegistry[name] = factory
}
// AddResourceFactory registers the specified resource type name and factory.
func AddResourceFactory(name string, factory func(context.Context) (resource.Resource, error)) {
resourceRegistryMu.Lock()
defer resourceRegistryMu.Unlock()
if resourceRegistrationClosed {
panic("Resource registration is closed")
}
if resourceRegistry == nil {
resourceRegistry = make(map[string]func(context.Context) (resource.Resource, error))
}
resourceRegistry[name] = factory
}
// DataSourceFactories returns the registered data source factories.
// Data Source registration is closed.
func DataSourceFactories() map[string]func(context.Context) (datasource.DataSource, error) {
dataSourceRegistryMu.Lock()
defer dataSourceRegistryMu.Unlock()
dataSourceRegistrationClosed = true
return dataSourceRegistry
}
// ResourceFactories returns the registered resource factories.
// Resource registration is closed.
func ResourceFactories() map[string]func(context.Context) (resource.Resource, error) {
resourceRegistryMu.Lock()
defer resourceRegistryMu.Unlock()
resourceRegistrationClosed = true
return resourceRegistry
}