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 }