74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
// 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)
|
|
}
|
|
}
|