#include "Attachement.h" #include "json/json.h" #include "json/layout.h" #include "util/format.h" #include "model/server.h" #include "model/media.h" bool int_to_string_callback( void* field_data, bool is_read, char** res ); bool preview_url_string_callback( void* field_data, bool is_read, char** res ) { struct media* m = field_data; if( !is_read ) { *res = aformat( "https://%s/media/%d/preview", g_server->domain, m->id ); return true; } return false; } bool url_string_callback( void* field_data, bool is_read, char** res ) { struct media* m = field_data; if( !is_read ) { *res = aformat( "https://%s/media/%d/blob", g_server->domain, m->id ); return true; } return false; } #define OBJ_TYPE struct media static struct json_object_field api_Attachment_layout[] = { { .key = "id", .offset = offsetof( OBJ_TYPE, id ), .type = &json_field_callback_string, .string_callback = int_to_string_callback, }, JSON_FIELD_FIXED_STRING( type, "image", true ), { .key = "preview_url", .offset = 0, .required = true, .type = &json_field_callback_string, .string_callback = preview_url_string_callback, }, { .key = "url", .offset = 0, .required = true, .type = &json_field_callback_string, .string_callback = url_string_callback, }, JSON_FIELD_END, }; #undef OBJ_TYPE void api_Attachement_write( struct media* m, FILE* f, int indent ) { struct json_writer jw = { .f = f, .indentation = "\t", .indent = indent, }; json_write_pretty_object_layout( &jw, api_Attachment_layout, m ); }