X-Git-Url: https://gitweb.ps.run/chirp/blobdiff_plain/6a5bd646d03ad9796f00b639881c3b3e25ee35f2..4cf4bee6f41428be1e4138b329b3f9d0a7ccf4f4:/src/main.zig diff --git a/src/main.zig b/src/main.zig index 2f7fd4c..cc33216 100644 --- a/src/main.zig +++ b/src/main.zig @@ -29,8 +29,11 @@ const User = struct { id: UserId, name: Username, display_name: DisplayName, + description: UserDescription, password_hash: PasswordHash, + posts: PostList, + following: UserList, followers: UserList, @@ -82,6 +85,7 @@ const PostId = enum(u64) { _ }; const Timestamp = i64; const Username = std.BoundedArray(u8, 32); const DisplayName = std.BoundedArray(u8, 64); +const UserDescription = std.BoundedArray(u8, 1024); const PasswordHash = std.BoundedArray(u8, 128); const SessionToken = u64; const CookieValue = std.BoundedArray(u8, 128); @@ -97,8 +101,8 @@ fn parse_enum(comptime E: type, buf: []const u8, base: u8) !E { } // https://developer.mozilla.org/en-US/docs/Glossary/Percent-encoding -fn reencode(text: []const u8) !PostText { - var result = try PostText.init(0); +fn reencode(comptime T: type, text: []const u8) !T { + var result = try T.init(0); const len = @min(text.len, 1024); // TODO: PostText length @@ -223,6 +227,7 @@ const Chirp = struct { .id = user_id, .name = username_array, .display_name = display_name, + .description = try UserDescription.init(0), .password_hash = try hash_password(password), .posts = try PostList.init(txn), .following = try UserList.init(txn), @@ -286,7 +291,7 @@ const Chirp = struct { const posts = try Db.posts(txn); post_id = try db.Prng.gen(posts.dbi, PostId); - const decoded_text = try reencode(text); + const decoded_text = try reencode(PostText, text); try posts.put(post_id, Post{ .id = post_id, .parent_id = parent_id, @@ -463,16 +468,12 @@ pub fn Paginate(comptime T: type) type { it.idx = try parse_enum(T.Base.Key, starting_at_str, 16); } - if (it.idx == null) { - return error.InvalidIterator; - } - return .{ .res = res, .view = view, .per_page = per_page, .it = it, - .starting_idx = it.idx.?, + .starting_idx = it.idx, }; } pub fn next(self: *Self) IterateResult { @@ -818,6 +819,15 @@ fn write_profile(res: *http.Response, txn: lmdb.Txn, logged_in: ?Login, user: Us , .{}); } + if (user.description.len > 0) { + try res.write( + \\