#pragma once #include "tcp-chat/tcp-chat.h" #include "tsqlite.h" #include "network/tcp-chat-protocol/v1.h" #include "tlibc/collections/List.h" /// @brief open DB and create tables Result(tsqlite_connection* db) ClientDatabase_open(cstr file_path); typedef struct ClientQueries ClientQueries; Result(ClientQueries*) ClientQueries_compile(tsqlite_connection* db); void ClientQueries_free(ClientQueries* self); typedef struct SavedServer { str address; str pk_base64; str name; str description; } SavedServer; List_declare(SavedServer); #define SavedServer_construct(ADDR, PK, NAME, DESC) ((SavedServer){ \ .address = ADDR, .pk_base64 = PK, .name = NAME, .description = DESC }) void SavedServer_destroy(SavedServer* self); /// @return true if new row was created Result(bool) SavedServer_createOrUpdate(ClientQueries* q, SavedServer* server); /// @param dst_list there SavedServer values are pushed Result(void) SavedServer_getAll(ClientQueries* q, List(SavedServer)* dst_list); Result(bool) SavedServer_exists(ClientQueries* q, str address); /// @return true if provided key and saved key match Result(bool) SavedServer_comparePublicKey(ClientQueries* q, str address, str pk_base64);