go-vise

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

resource.go (3019B)


      1 package resource
      2 
      3 import (
      4 	"context"
      5 )
      6 
      7 // Result contains the results of an external code operation.
      8 type Result struct {
      9 	Content string // content value for symbol after execution.
     10 	Status int // application defined status code which can complement error returns
     11 	FlagSet []uint32 // request caller to set error flags at given indices.
     12 	FlagReset []uint32 // request caller to reset error flags at given indices.
     13 }
     14 
     15 // EntryFunc is a function signature for retrieving value for a key
     16 type EntryFunc func(ctx context.Context, sym string, input []byte) (Result, error)
     17 type CodeFunc func(sym string) ([]byte, error)
     18 type MenuFunc func(ctx context.Context, sym string) (string, error)
     19 type TemplateFunc func(ctx context.Context, sym string) (string, error)
     20 type FuncForFunc func(sym string) (EntryFunc, error)
     21 
     22 // Resource implementation are responsible for retrieving values and templates for symbols, and can render templates from value dictionaries.
     23 type Resource interface {
     24 	GetTemplate(ctx context.Context, sym string) (string, error) // Get the template for a given symbol.
     25 	GetCode(sym string) ([]byte, error) // Get the bytecode for the given symbol.
     26 	GetMenu(ctx context.Context, sym string) (string, error) // Receive menu test for menu symbol.
     27 	FuncFor(sym string) (EntryFunc, error) // Resolve symbol content point for.
     28 }
     29 
     30 // MenuResource contains the base definition for building Resource implementations.
     31 //
     32 // TODO: Rename to BaseResource
     33 type MenuResource struct {
     34 	sinkValues []string
     35 	codeFunc CodeFunc
     36 	templateFunc TemplateFunc
     37 	menuFunc MenuFunc
     38 	funcFunc FuncForFunc
     39 }
     40 
     41 // NewMenuResource creates a new MenuResource instance.
     42 func NewMenuResource() *MenuResource {
     43 	return &MenuResource{}
     44 }
     45 
     46 // WithCodeGetter sets the code symbol resolver method.
     47 func(m *MenuResource) WithCodeGetter(codeGetter CodeFunc) *MenuResource {
     48 	m.codeFunc = codeGetter
     49 	return m
     50 }
     51 
     52 // WithEntryGetter sets the content symbol resolver getter method.
     53 func(m *MenuResource) WithEntryFuncGetter(entryFuncGetter FuncForFunc) *MenuResource {
     54 	m.funcFunc = entryFuncGetter
     55 	return m
     56 }
     57 
     58 // WithTemplateGetter sets the template symbol resolver method.
     59 func(m *MenuResource) WithTemplateGetter(templateGetter TemplateFunc) *MenuResource {
     60 	m.templateFunc = templateGetter
     61 	return m
     62 }
     63 
     64 // WithMenuGetter sets the menu symbol resolver method.
     65 func(m *MenuResource) WithMenuGetter(menuGetter MenuFunc) *MenuResource {
     66 	m.menuFunc = menuGetter
     67 	return m
     68 }
     69 
     70 // FuncFor implements Resource interface
     71 func(m MenuResource) FuncFor(sym string) (EntryFunc, error) {
     72 	return m.funcFunc(sym)
     73 }
     74 
     75 // GetCode implements Resource interface
     76 func(m MenuResource) GetCode(sym string) ([]byte, error) {
     77 	return m.codeFunc(sym)
     78 }
     79 
     80 // GetTemplate implements Resource interface
     81 func(m MenuResource) GetTemplate(ctx context.Context, sym string) (string, error) {
     82 	return m.templateFunc(ctx, sym)
     83 }
     84 
     85 // GetMenu implements Resource interface
     86 func(m MenuResource) GetMenu(ctx context.Context, sym string) (string, error) {
     87 	return m.menuFunc(ctx, sym)
     88 }