Customization¶
You can define custom tasks for Effe.
We want to generate for making a post request by url.
effe.BuildFlow( effe.Step(step1), mytask.POST( "http://example.com", ), )
For that, you should create the function POST
in your package mytask.
package mytask func POST(uri string) interface{} { panic("implementation is not generated, run myeffe") }
Write functions for:
- Loader
- Strategy
- Drawer
// Loading and validating expressions. func LoadPostRequestComponent(effeConditionCall *ast.CallExpr, f loaders.FlowLoader) (types.Component, error) { return nil, nil // type of your component and error } // Generates code. func GenPostRequestComponent(f strategies.FlowGen, c types.Component) (strategies.ComponentCall, error) { return nil, nil } // Generates a statement for plantuml. func DrawPostRequestComponent(drawer.Drawer, types.Component) (drawer.ComponentStmt, error) { return nil, nil }
and register it
settings := generator.DefaultSettigs() strategy := strategies.NewChain(strategies.WithServiceObjectName(settings.LocalInterfaceVarname())) err := strategy.Register("POST", testcustomization.GenPostRequestComponent) if err != nil { fmt.Println(err) os.Exit(1) } loader := loaders.NewLoader(loaders.WithPackages([]string{"effe", "testcustomization"})) err = loader.Register("POST", testcustomization.LoadPostRequestComponent) if err != nil { fmt.Println(err) os.Exit(1) } d := drawer.NewDrawer() err = d.Register("POST", DrawPostRequestComponent) if err != nil { fmt.Println(err) os.Exit(1) } gen := generator.NewGenerator( generator.WithSetttings(settings), generator.WithLoader(loader), generator.WithStrategy(strategy), generator.WithDrawer(d), ) // Run generator gen.Generate(context.Background(), d, os.Environ(), []string{"."}