| const std = @import("std"); |
| const zap = @import("zap"); |
| const ZigSmartSearch = @import("ZigSmartSearch").ZigSmartSearch; |
| const database = @embedFile("database.json"); |
| const allocator = std.heap.c_allocator; |
|
|
| var instance: ZigSmartSearch = undefined; |
|
|
| fn on_request(r: zap.Request) !void { |
| try r.setHeader("Content-Type", "application/json"); |
| try r.setHeader("Access-Control-Allow-Origin", "*"); |
| if (r.query) |the_query| { |
| var results = try instance.search(the_query); |
| defer results.deinit(); |
| if (results.items.len == 0) { |
| r.sendJson("[]") catch return; |
| return; |
| } |
| const res = try results.toOwnedSlice(); |
| var arraylist = std.ArrayList(u8).init(allocator); |
| errdefer arraylist.deinit(); |
| try arraylist.append('['); |
| for (res) |result| { |
| try arraylist.append('"'); |
| try arraylist.appendSlice(result.doc.get("title").?.string); |
| try arraylist.append('"'); |
| try arraylist.append(','); |
| } |
| _ = arraylist.pop(); |
| try arraylist.append(']'); |
| const result = try arraylist.toOwnedSlice(); |
| defer allocator.free(result); |
| r.sendJson(result) catch return; |
| } |
| } |
|
|
| pub fn main() !void { |
| instance = try ZigSmartSearch.init( |
| allocator, |
| database, |
| ZigSmartSearch.default_config, |
| ); |
| var listener = zap.HttpListener.init(.{ |
| .port = 7860, |
| .on_request = on_request, |
| .log = true, |
| }); |
| try listener.listen(); |
|
|
| std.debug.print("Listening on 0.0.0.0:7860\n", .{}); |
|
|
| |
| zap.start(.{ |
| .threads = 2, |
| .workers = 2, |
| }); |
| } |
|
|