...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package load_test
16
17 import (
18 "fmt"
19 "os"
20 "path/filepath"
21
22 "golang.org/x/tools/txtar"
23
24 "cuelang.org/go/cue"
25 "cuelang.org/go/cue/cuecontext"
26 "cuelang.org/go/cue/load"
27 "cuelang.org/go/internal/cueexperiment"
28 "cuelang.org/go/internal/registrytest"
29 "cuelang.org/go/internal/txtarfs"
30 )
31
32
33
34
35
36
37 func Example() {
38
39
40 insts := load.Instances([]string{"./example"}, &load.Config{
41 Dir: filepath.Join("testdata", "testmod"),
42 Env: []string{},
43 })
44
45
46
47 fmt.Println("Number of instances:", len(insts))
48 inst := insts[0]
49 if err := inst.Err; err != nil {
50 fmt.Println(err)
51 return
52 }
53 fmt.Println("Instance module:", inst.Module)
54 fmt.Println("Instance import path:", inst.ImportPath)
55 fmt.Println()
56
57
58 fmt.Println("Source files:")
59 for _, file := range inst.Files {
60 fmt.Println(filepath.Base(file.Filename), "with", len(file.Decls), "declarations")
61 }
62 fmt.Println()
63
64
65
66 ctx := cuecontext.New()
67 val := ctx.BuildInstance(inst)
68 if err := val.Err(); err != nil {
69 fmt.Println(err)
70 return
71 }
72
73
74 fieldStr, err := val.LookupPath(cue.MakePath(cue.Str("output"))).String()
75 if err != nil {
76 fmt.Println(err)
77 return
78 }
79 fmt.Println("Field string:", fieldStr)
80
81
82
83
84
85
86
87
88
89
90 }
91
92 func Example_externalModules() {
93
94
95
96 env, cleanup := setUpModulesExample()
97 defer cleanup()
98
99 insts := load.Instances([]string{"."}, &load.Config{
100 Dir: filepath.Join("testdata", "testmod-external"),
101 Env: env,
102 })
103 inst := insts[0]
104 if err := inst.Err; err != nil {
105 fmt.Println(err)
106 return
107 }
108 ctx := cuecontext.New()
109 val := ctx.BuildInstance(inst)
110 if err := val.Err(); err != nil {
111 fmt.Println(err)
112 return
113 }
114
115
116 fieldStr, err := val.LookupPath(cue.MakePath(cue.Str("output"))).String()
117 if err != nil {
118 fmt.Println(err)
119 return
120 }
121 fmt.Println("Field string:", fieldStr)
122
123
124 }
125
126 func setUpModulesExample() (env []string, cleanup func()) {
127 registryArchive := txtar.Parse([]byte(`
128 -- foo.example_v0.0.1/cue.mod/module.cue --
129 module: "foo.example@v0"
130 -- foo.example_v0.0.1/bar/bar.cue --
131 package bar
132
133 value: "world"
134 `))
135
136 registry, err := registrytest.New(txtarfs.FS(registryArchive), "")
137 if err != nil {
138 panic(err)
139 }
140 cleanups := []func(){registry.Close}
141 env = append(env, "CUE_REGISTRY="+registry.Host()+"+insecure")
142 dir, err := os.MkdirTemp("", "")
143 if err != nil {
144 panic(err)
145 }
146 env = append(env, "CUE_CACHE_DIR="+dir)
147 oldModulesExperiment := cueexperiment.Flags.Modules
148 cueexperiment.Flags.Modules = true
149 cleanups = append(cleanups, func() {
150 cueexperiment.Flags.Modules = oldModulesExperiment
151 })
152 return env, func() {
153 for i := len(cleanups) - 1; i >= 0; i-- {
154 cleanups[i]()
155 }
156 }
157 }
158
View as plain text