// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com). // All rights reserved. // module-register.go package expr import ( "fmt" ) type module struct { importFunc func(ExprContext) description string imported bool } func newModule(importFunc func(ExprContext), description string) *module { return &module{importFunc, description, false} } var moduleRegister map[string]*module func registerImport(name string, importFunc func(ExprContext), description string) { if moduleRegister == nil { moduleRegister = make(map[string]*module) } if _, exists := moduleRegister[name]; exists { panic(fmt.Errorf("module %q already registered", name)) } moduleRegister[name] = newModule(importFunc, description) } // func ImportInContext(ctx ExprContext, name string) (exists bool) { // var mod *module // if mod, exists = moduleRegister[name]; exists { // mod.importFunc(ctx) // mod.imported = true // } // return // } // func ImportInContextByGlobPattern(ctx ExprContext, pattern string) (count int, err error) { // var matched bool // for name, mod := range moduleRegister { // if matched, err = filepath.Match(pattern, name); err == nil { // if matched { // count++ // mod.importFunc(ctx) // mod.imported = true // } // } else { // break // } // } // return // } func IterateModules(op func(name, description string, imported bool) bool) { if op != nil { for name, mod := range moduleRegister { if !op(name, mod.description, mod.imported) { break } } } } // ---- func init() { if moduleRegister == nil { moduleRegister = make(map[string]*module) } }