const std = @import("std"); const api = @import("api"); const query_utils = @import("../query.zig"); pub const global = struct { pub const method = .GET; pub const path = "/timelines/global"; pub const Query = api.TimelineArgs; pub fn handler(req: anytype, res: anytype, srv: anytype) !void { const results = try srv.globalTimeline(req.query); var link = std.ArrayList(u8).init(req.allocator); const link_writer = link.writer(); defer link.deinit(); try writeLink(link_writer, srv.community, path, results.next_page, "next"); try link_writer.writeByte(','); try writeLink(link_writer, srv.community, path, results.prev_page, "prev"); try res.headers.put("Link", link.items); try res.json(.ok, results.items); } }; pub const local = struct { pub const method = .GET; pub const path = "/timelines/local"; pub const Query = api.TimelineArgs; pub fn handler(req: anytype, res: anytype, srv: anytype) !void { const results = try srv.localTimeline(req.query); var link = std.ArrayList(u8).init(req.allocator); const link_writer = link.writer(); defer link.deinit(); try writeLink(link_writer, srv.community, path, results.next_page, "next"); try link_writer.writeByte(','); try writeLink(link_writer, srv.community, path, results.prev_page, "prev"); try res.headers.put("Link", link.items); try res.json(.ok, results.items); } }; // TOOD: unify with communities.zig fn writeLink( writer: anytype, community: api.Community, path: []const u8, params: anytype, rel: []const u8, ) !void { // TODO: percent-encode try std.fmt.format( writer, "<{s}://{s}/{s}?", .{ @tagName(community.scheme), community.host, path }, ); try query_utils.formatQuery(params, writer); try std.fmt.format( writer, ">; rel=\"{s}\"", .{rel}, ); }