]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blob - vendor/github.com/zclconf/go-cty/cty/types_to_register.go
deps: github.com/hashicorp/terraform@sdk-v0.11-with-go-modules
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / zclconf / go-cty / cty / types_to_register.go
1 package cty
2
3 import (
4 "encoding/gob"
5 "fmt"
6 "math/big"
7 "strings"
8
9 "github.com/zclconf/go-cty/cty/set"
10 )
11
12 // InternalTypesToRegister is a slice of values that covers all of the
13 // internal types used in the representation of cty.Type and cty.Value
14 // across all cty Types.
15 //
16 // This is intended to be used to register these types with encoding
17 // packages that require registration of types used in interfaces, such as
18 // encoding/gob, thus allowing cty types and values to be included in streams
19 // created from those packages. However, registering with gob is not necessary
20 // since that is done automatically as a side-effect of importing this package.
21 //
22 // Callers should not do anything with the values here except pass them on
23 // verbatim to a registration function.
24 //
25 // If the calling application uses Capsule types that wrap local structs either
26 // directly or indirectly, these structs may also need to be registered in
27 // order to support encoding and decoding of values of these types. That is the
28 // responsibility of the calling application.
29 var InternalTypesToRegister []interface{}
30
31 func init() {
32 InternalTypesToRegister = []interface{}{
33 primitiveType{},
34 typeList{},
35 typeMap{},
36 typeObject{},
37 typeSet{},
38 setRules{},
39 set.Set{},
40 typeTuple{},
41 big.Float{},
42 capsuleType{},
43 []interface{}(nil),
44 map[string]interface{}(nil),
45 }
46
47 // Register these with gob here, rather than in gob.go, to ensure
48 // that this will always happen after we build the above.
49 for _, tv := range InternalTypesToRegister {
50 typeName := fmt.Sprintf("%T", tv)
51 if strings.HasPrefix(typeName, "cty.") {
52 gob.RegisterName(fmt.Sprintf("github.com/zclconf/go-cty/%s", typeName), tv)
53 } else {
54 gob.Register(tv)
55 }
56 }
57 }