#include "Relationship.h" #include "json/json.h" #include "json/layout.h" #include "util/format.h" #include "model/account.h" #include #include #include #define OBJ_TYPE struct Relationship static struct json_object_field Relationship_layout[] = { JSON_FIELD_STRING( id, true ), JSON_FIELD_BOOL( following, true ), JSON_FIELD_BOOL( showing_reblogs, true ), JSON_FIELD_BOOL( notifying, true ), JSON_FIELD_BOOL( followed_by, true ), JSON_FIELD_BOOL( blocking, true ), JSON_FIELD_BOOL( blocked_by, true ), JSON_FIELD_BOOL( muting, true ), JSON_FIELD_BOOL( muting_notifications, true ), JSON_FIELD_BOOL( requested, true ), JSON_FIELD_BOOL( domain_blocking, true ), JSON_FIELD_BOOL( endorsed, true ), JSON_FIELD_STRING( note, true ), JSON_FIELD_END, }; #undef OBJ_TYPE void api_Relationship_init( struct Relationship* r, struct account* a, struct account* rel ) { memset( r, 0, sizeof(*r) ); r->id = aformat( "%018u",rel->id ); r->followed_by = account_does_follow( rel, a->id ); r->following = account_does_follow( a, rel->id ); } void api_Relationship_write( struct account* a, struct account* rel, FILE* f, int indent ) { struct Relationship r; api_Relationship_init( &r, a, rel ); struct json_writer jw = { .f = f, .indentation = "\t", .indent = indent, }; json_write_pretty_object_layout( &jw, Relationship_layout, &r ); free(r.id); } static bool api_Relationship_to_owner_writer( struct json_writer* jw, const char* field_name, void* field_data, struct json_reflection* layout_field_data, int offset ) { json_write_field_name( jw, field_name ); struct account* owner_account = account_from_id( owner_account_id ); api_Relationship_write( field_data, owner_account, jw->f, jw->indent ); account_free(owner_account); return true; } struct json_field_type api_Relationship_to_owner = { .writer = api_Relationship_to_owner_writer, };