+Post\r
+PostNew() {\r
+ Post result;\r
+ memset(&result, 0, sizeof(result));\r
+ return result;\r
+}\r
+\r
+void\r
+PostWrite(Post * post, FILE * f) {\r
+ fwrite(&post->timestamp, 8, 1, f);\r
+ fwrite(post->user->name, 1, sizeof(post->user->name), f);\r
+ fwrite(post->content, 1, sizeof(post->content), f);\r
+ fwrite(&post->likes, 4, 1, f);\r
+ uint32_t numComments = arrlen(post->comments);\r
+ fwrite(&numComments, 4, 1, f);\r
+ for (int i = 0; i < numComments; i++) {\r
+ PostWrite(&post->comments[i], f);\r
+ }\r
+}\r
+\r
+void\r
+PostRead(Post * post, FILE * f) {\r
+ fread(&post->timestamp, 8, 1, f);\r
+ char name[NAME_LEN];\r
+ fread(name, 1, sizeof(name), f);\r
+ post->user = UsersFind(mg_str(name));\r
+ fread(post->content, 1, sizeof(post->content), f);\r
+ fread(&post->likes, 4, 1, f);\r
+ uint32_t numComments;\r
+ fread(&numComments, 4, 1, f);\r
+ post->comments = NULL;\r
+ for (int i = 0; i < numComments; i++) {\r
+ Post newComment = PostNew();\r
+ PostRead(&newComment, f);\r
+ arrput(post->comments, newComment);\r
+ }\r
+}\r
+\r