go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

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 }