diff --git a/.gitignore b/.gitignore index 7ec9310..7e4c4e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ **/zig-out **/zig-cache **.db +/config.json diff --git a/src/main/api.zig b/src/main/api.zig index 840a4bf..e6aa959 100644 --- a/src/main/api.zig +++ b/src/main/api.zig @@ -2,10 +2,10 @@ const std = @import("std"); const util = @import("util"); const db = @import("./db.zig"); - const models = @import("./db/models.zig"); pub const DateTime = util.DateTime; pub const Uuid = util.Uuid; +const Config = @import("./main.zig").Config; const PwHash = std.crypto.pwhash.scrypt; const pw_hash_params = PwHash.Params.interactive; @@ -101,13 +101,15 @@ pub fn initThreadPrng(seed: u64) void { pub const ApiSource = struct { db: db.Database, internal_alloc: std.mem.Allocator, + config: Config, pub const Conn = ApiConn(db.Database); - pub fn init(alloc: std.mem.Allocator) !ApiSource { + pub fn init(alloc: std.mem.Allocator, cfg: Config) !ApiSource { return ApiSource{ .db = try db.Database.init(), .internal_alloc = alloc, + .config = cfg, }; } diff --git a/src/main/main.zig b/src/main/main.zig index ef329b6..bb89525 100644 --- a/src/main/main.zig +++ b/src/main/main.zig @@ -34,11 +34,13 @@ const router = Router{ pub const RequestServer = struct { alloc: std.mem.Allocator, api: api.ApiSource, + config: Config, - fn init(alloc: std.mem.Allocator) !RequestServer { + fn init(alloc: std.mem.Allocator, config: Config) !RequestServer { return RequestServer{ .alloc = alloc, - .api = try api.ApiSource.init(alloc), + .api = try api.ApiSource.init(alloc, config), + .config = config, }; } @@ -63,9 +65,25 @@ pub const RequestServer = struct { } }; +pub const Config = struct { + host: []const u8, +}; + +fn loadConfig(alloc: std.mem.Allocator) !Config { + var file = try std.fs.cwd().openFile("config.json", .{}); + defer file.close(); + + const bytes = try file.reader().readAllAlloc(alloc, 1 << 63); + defer alloc.free(bytes); + + var ts = std.json.TokenStream.init(bytes); + return std.json.parse(Config, &ts, .{ .allocator = alloc }); +} + pub fn main() anyerror!void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; - var srv = try RequestServer.init(gpa.allocator()); + const cfg = try loadConfig(gpa.allocator()); + var srv = try RequestServer.init(gpa.allocator(), cfg); api.initThreadPrng(@bitCast(u64, std.time.milliTimestamp())); return srv.listenAndRun(std.net.Address.parseIp("0.0.0.0", 8080) catch unreachable); }