61 lines
1.6 KiB
D
61 lines
1.6 KiB
D
import handy_http_transport;
|
|
import slf4d;
|
|
import slf4d.default_provider;
|
|
|
|
import api_mapping;
|
|
|
|
struct AppConfig {
|
|
ushort port;
|
|
string webOrigin;
|
|
string logLevel;
|
|
}
|
|
|
|
void main() {
|
|
const AppConfig config = readConfig();
|
|
Level logLevel = Levels.INFO;
|
|
if (config.logLevel == "TRACE") {
|
|
logLevel = Levels.TRACE;
|
|
} else if (config.logLevel == "DEBUG") {
|
|
logLevel = Levels.DEBUG;
|
|
} else if (config.logLevel == "WARN") {
|
|
logLevel = Levels.WARN;
|
|
} else if (config.logLevel == "ERROR") {
|
|
logLevel = Levels.ERROR;
|
|
}
|
|
auto provider = new DefaultProvider(logLevel);
|
|
configureLoggingProvider(provider);
|
|
infoF!"Loaded app config: port = %d, webOrigin = %s"(config.port, config.webOrigin);
|
|
|
|
Http1TransportConfig transportConfig = defaultConfig();
|
|
transportConfig.port = config.port;
|
|
HttpTransport transport = new TaskPoolHttp1Transport(mapApiHandlers(config.webOrigin), transportConfig);
|
|
transport.start();
|
|
}
|
|
|
|
AppConfig readConfig() {
|
|
import std.file : exists, readText;
|
|
import std.json;
|
|
import std.conv : to;
|
|
|
|
AppConfig defaultConfig = AppConfig(
|
|
8080,
|
|
"http://localhost:5173",
|
|
"INFO"
|
|
);
|
|
// Local dev environment if no config is given.
|
|
if (!exists("finnow-api-config.json")) {
|
|
return defaultConfig;
|
|
}
|
|
JSONValue obj = parseJSON(readText("finnow-api-config.json"));
|
|
if ("port" in obj.object) {
|
|
defaultConfig.port = obj.object["port"].integer.to!ushort;
|
|
}
|
|
if ("webOrigin" in obj.object) {
|
|
defaultConfig.webOrigin = obj.object["webOrigin"].str;
|
|
}
|
|
if ("logLevel" in obj.object) {
|
|
defaultConfig.logLevel = obj.object["logLevel"].str;
|
|
}
|
|
return defaultConfig;
|
|
}
|