main.go (1574B)
1 // Example: Profile data completion menu. 2 package main 3 4 import ( 5 "context" 6 "flag" 7 "fmt" 8 "os" 9 "path" 10 11 testdataloader "github.com/peteole/testdata-loader" 12 13 "git.defalsify.org/vise.git/cache" 14 "git.defalsify.org/vise.git/db" 15 fsdb "git.defalsify.org/vise.git/db/fs" 16 "git.defalsify.org/vise.git/engine" 17 "git.defalsify.org/vise.git/resource" 18 "git.defalsify.org/vise.git/state" 19 ) 20 21 var ( 22 baseDir = testdataloader.GetBasePath() 23 scriptDir = path.Join(baseDir, "examples", "static") 24 emptyResult = resource.Result{} 25 ) 26 27 func out(ctx context.Context, sym string, input []byte) (resource.Result, error) { 28 return resource.Result{ 29 Content: "foo", 30 }, nil 31 } 32 33 func main() { 34 var useInternal bool 35 root := "root" 36 dir := scriptDir 37 flag.BoolVar(&useInternal, "i", false, "use internal function for render") 38 flag.Parse() 39 fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, dir) 40 41 ctx := context.Background() 42 st := state.NewState(0) 43 store := fsdb.NewFsDb() 44 err := store.Connect(ctx, scriptDir) 45 if err != nil { 46 panic(err) 47 } 48 rs := resource.NewDbResource(store) 49 rs.With(db.DATATYPE_STATICLOAD) 50 51 if useInternal { 52 rs.AddLocalFunc("out", out) 53 } 54 ca := cache.NewCache() 55 cfg := engine.Config{ 56 Root: root, 57 } 58 en := engine.NewEngine(cfg, rs) 59 en = en.WithState(st) 60 en = en.WithMemory(ca) 61 62 _, err = en.Exec(ctx, []byte{}) 63 if err != nil { 64 fmt.Fprintf(os.Stderr, "exec error: %v\n", err) 65 os.Exit(1) 66 } 67 _, err = en.Flush(ctx, os.Stdout) 68 if err != nil { 69 fmt.Fprintf(os.Stderr, "flush error: %v\n", err) 70 os.Exit(1) 71 } 72 }