Go-based dictionary backend providing word validation, definitions, synonyms, and cross-language translation for English, French, and Portuguese. Designed as a self-hosted replacement for Wordnik, backing GogoBee. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
30 lines
648 B
Go
30 lines
648 B
Go
package loader
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log/slog"
|
|
"time"
|
|
)
|
|
|
|
type Loader interface {
|
|
Name() string
|
|
Load(db *sql.DB, dataDir string) error
|
|
}
|
|
|
|
func Run(db *sql.DB, dataDir string, loaders []Loader, skip map[string]bool) error {
|
|
for _, l := range loaders {
|
|
if skip[l.Name()] {
|
|
slog.Info("skipping loader", "name", l.Name())
|
|
continue
|
|
}
|
|
slog.Info("running loader", "name", l.Name())
|
|
start := time.Now()
|
|
if err := l.Load(db, dataDir); err != nil {
|
|
return fmt.Errorf("loader %s: %w", l.Name(), err)
|
|
}
|
|
slog.Info("loader complete", "name", l.Name(), "elapsed", time.Since(start).Round(time.Millisecond))
|
|
}
|
|
return nil
|
|
}
|