package main import ( "os" "os/signal" "syscall" "github.com/pikami/cosmium/api" "github.com/pikami/cosmium/api/config" "github.com/pikami/cosmium/internal/datastore" badgerdatastore "github.com/pikami/cosmium/internal/datastore/badger_datastore" jsondatastore "github.com/pikami/cosmium/internal/datastore/json_datastore" "github.com/pikami/cosmium/internal/logger" ) func main() { configuration := config.ParseFlags() var dataStore datastore.DataStore switch configuration.DataStore { case config.DataStoreBadger: dataStore = badgerdatastore.NewBadgerDataStore(badgerdatastore.BadgerDataStoreOptions{ PersistDataFilePath: configuration.PersistDataFilePath, }) logger.InfoLn("Using Badger data store") default: dataStore = jsondatastore.NewJsonDataStore(jsondatastore.JsonDataStoreOptions{ InitialDataFilePath: configuration.InitialDataFilePath, PersistDataFilePath: configuration.PersistDataFilePath, }) logger.InfoLn("Using in-memory data store") } server := api.NewApiServer(dataStore, &configuration) err := server.Start() if err != nil { panic(err) } waitForExit(server, dataStore) } func waitForExit(server *api.ApiServer, dataStore datastore.DataStore) { sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) // Block until a exit signal is received <-sigs // Stop the server server.Stop() dataStore.Close() }