main.go (2029B)
1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 "os" 8 "path" 9 10 testdataloader "github.com/peteole/testdata-loader" 11 12 "git.defalsify.org/vise.git/cache" 13 "git.defalsify.org/vise.git/engine" 14 "git.defalsify.org/vise.git/resource" 15 "git.defalsify.org/vise.git/state" 16 ) 17 18 var ( 19 baseDir = testdataloader.GetBasePath() 20 scriptDir = path.Join(baseDir, "examples", "validate") 21 emptyResult = resource.Result{} 22 ) 23 24 const ( 25 USERFLAG_HAVESOMETHING = state.FLAG_USERSTART 26 ) 27 28 type verifyResource struct { 29 *resource.FsResource 30 st *state.State 31 } 32 33 func(vr *verifyResource) verify(ctx context.Context, sym string, input []byte) (resource.Result, error) { 34 var err error 35 if string(input) == "something" { 36 vr.st.SetFlag(USERFLAG_HAVESOMETHING) 37 } 38 return resource.Result{ 39 Content: "", 40 }, err 41 } 42 43 func(vr *verifyResource) again(ctx context.Context, sym string, input []byte) (resource.Result, error) { 44 vr.st.ResetFlag(USERFLAG_HAVESOMETHING) 45 return resource.Result{}, nil 46 } 47 48 func main() { 49 var root string 50 var size uint 51 var sessionId string 52 flag.UintVar(&size, "s", 0, "max size of output") 53 flag.StringVar(&root, "root", "root", "entry point symbol") 54 flag.StringVar(&sessionId, "session-id", "default", "session id") 55 flag.Parse() 56 fmt.Fprintf(os.Stderr, "starting session at symbol '%s' using resource dir: %s\n", root, scriptDir) 57 58 st := state.NewState(1) 59 rsf := resource.NewFsResource(scriptDir) 60 rs := verifyResource{rsf, &st} 61 rs.AddLocalFunc("verifyinput", rs.verify) 62 rs.AddLocalFunc("again", rs.again) 63 ca := cache.NewCache() 64 cfg := engine.Config{ 65 Root: "root", 66 SessionId: sessionId, 67 OutputSize: uint32(size), 68 } 69 ctx := context.Background() 70 ctx = context.WithValue(ctx, "SessionId", sessionId) 71 en := engine.NewEngine(ctx, cfg, &st, rs, ca) 72 var err error 73 _, err = en.Init(ctx) 74 if err != nil { 75 fmt.Fprintf(os.Stderr, "engine init fail: %v\n", err) 76 os.Exit(1) 77 } 78 err = engine.Loop(ctx, &en, os.Stdin, os.Stdout) 79 if err != nil { 80 fmt.Fprintf(os.Stderr, "loop exited with error: %v\n", err) 81 os.Exit(1) 82 } 83 }