Skip to content
This repository has been archived by the owner on Dec 26, 2022. It is now read-only.

Implement api_find_transactions_by_tag #40

Merged
merged 5 commits into from
Jan 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ cc_binary(

cc_library(
name = "apis",
srcs = ["apis.c"],
hdrs = ["apis.h"],
visibility = ["//visibility:public"],
deps = [
Expand Down
43 changes: 35 additions & 8 deletions apis.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "apis.h"

int api_get_tips(const iota_client_service_t* const service,
const char* const obj, char* json_result) {
const char* const obj, char** json_result) {
int ret = 0;
ta_get_tips_req_t* req = ta_get_tips_req_new();
ta_get_tips_res_t* res = ta_get_tips_res_new();
Expand All @@ -19,7 +19,7 @@ int api_get_tips(const iota_client_service_t* const service,
goto done;
}

ret = ta_get_tips_res_serialize(&json_result, res);
ret = ta_get_tips_res_serialize(json_result, res);

done:
ta_get_tips_req_free(req);
Expand All @@ -28,7 +28,7 @@ int api_get_tips(const iota_client_service_t* const service,
}

int api_generate_address(const iota_client_service_t* const service,
char* json_result) {
char** json_result) {
int ret = 0;
ta_generate_address_res_t* res = ta_generate_address_res_new();
if (res == NULL) {
Expand All @@ -40,15 +40,15 @@ int api_generate_address(const iota_client_service_t* const service,
goto done;
}

ret = ta_generate_address_res_serialize(&json_result, res);
ret = ta_generate_address_res_serialize(json_result, res);

done:
ta_generate_address_res_free(&res);
return ret;
}

int api_get_transaction_msg(const iota_client_service_t* const service,
const char* const obj, char* json_result) {
const char* const obj, char** json_result) {
int ret = 0;
ta_get_transaction_msg_req_t* req = ta_get_transaction_msg_req_new();
ta_get_transaction_msg_res_t* res = ta_get_transaction_msg_res_new();
Expand All @@ -66,10 +66,37 @@ int api_get_transaction_msg(const iota_client_service_t* const service,
goto done;
}

ret = ta_get_transaction_msg_res_serialize(&json_result, res);
ret = ta_get_transaction_msg_res_serialize(json_result, res);

done:
ta_get_transaction_req_free(&req);
ta_get_transaction_res_free(&res);
ta_get_transaction_msg_req_free(&req);
ta_get_transaction_msg_res_free(&res);
return ret;
}

int api_find_transactions_by_tag(const iota_client_service_t* const service,
const char* const obj, char** json_result) {
int ret = 0;
ta_find_transactions_req_t* req = ta_find_transactions_req_new();
ta_find_transactions_res_t* res = ta_find_transactions_res_new();
if (req == NULL || res == NULL) {
goto done;
}

ret = ta_find_transactions_req_deserialize(obj, req);
if (ret) {
goto done;
}

ret = ta_find_transactions_by_tag(service, req, res);
if (ret) {
goto done;
}

ret = ta_find_transactions_res_serialize(json_result, res);

done:
ta_find_transactions_req_free(&req);
ta_find_transactions_res_free(&res);
return ret;
}
10 changes: 6 additions & 4 deletions apis.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@ extern "C" {
int handle_request(const iota_client_service_t* const service,
const char* const obj);
int api_generate_address(const iota_client_service_t* const service,
char* json_result);
char** json_result);
int api_get_tips(const iota_client_service_t* const service,
const char* const obj, char* json_result);
const char* const obj, char** json_result);
int api_send_transfer(const iota_client_service_t* const service,
const char* const obj, char* json_result);
const char* const obj, char** json_result);
int api_get_transaction_msg(const iota_client_service_t* const service,
const char* const obj, char* json_result);
const char* const obj, char** json_result);
int api_find_transactions_by_tag(const iota_client_service_t* const service,
const char* const obj, char** json_result);

#ifdef __cplusplus
}
Expand Down
44 changes: 44 additions & 0 deletions serializer/serializer.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,3 +264,47 @@ int ta_get_transaction_msg_res_serialize(
cJSON_Delete(json_root);
return ret;
}

int ta_find_transactions_req_deserialize(const char* const obj,
ta_find_transactions_req_t* req) {
cJSON* json_obj = cJSON_Parse(obj);
cJSON* json_result = NULL;
flex_trit_t tag_trits[NUM_TRITS_TAG];
int ret;

if (json_obj == NULL) {
ret = -1;
goto done;
}

json_result = cJSON_GetObjectItemCaseSensitive(json_obj, "tag");
flex_trits_from_trytes(tag_trits, NUM_TRITS_TAG,
(const tryte_t*)json_result->valuestring,
NUM_TRYTES_TAG, NUM_TRYTES_TAG);
ret = hash81_queue_push(&req->tags, tag_trits);

done:
cJSON_Delete(json_obj);
return ret;
}

int ta_find_transactions_res_serialize(
char** obj, const ta_find_transactions_res_t* const res) {
int ret = 0;
cJSON* json_root = cJSON_CreateObject();
if (json_root == NULL) {
ret = -1;
goto done;
}

hash243_queue_to_json_array(res->hashes, json_root, "hashes");
*obj = cJSON_PrintUnformatted(json_root);
if (*obj == NULL) {
ret = -1;
goto done;
}

done:
cJSON_Delete(json_root);
return ret;
}
4 changes: 4 additions & 0 deletions serializer/serializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ int ta_get_transaction_msg_req_deserialize(const char* const obj,
ta_get_transaction_msg_req_t* req);
int ta_get_transaction_msg_res_serialize(
char** obj, const ta_get_transaction_msg_res_t* const res);
int ta_find_transactions_req_deserialize(const char* const obj,
ta_find_transactions_req_t* req);
int ta_find_transactions_res_serialize(
char** obj, const ta_find_transactions_res_t* const res);

#ifdef __cplusplus
}
Expand Down
30 changes: 30 additions & 0 deletions serializer/test/test_serializer.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,34 @@ void test_serialize_ta_get_transaction_msg(void) {
free(json_result);
}

void test_deserialize_ta_find_transactions_by_tag(void) {
const char* json =
"{\"command\":\"find_transaction_by_tag\","
"\"tag\":\"" TAG_MSG "\"}";

ta_find_transactions_req_t* req = ta_find_transactions_req_new();
ta_find_transactions_req_deserialize(json, req);

TEST_ASSERT_EQUAL_MEMORY(TAG_MSG, req->tags->hash, TAG_MSG_LEN);

ta_find_transactions_req_free(&req);
}

void test_serialize_ta_find_transactions_by_tag(void) {
const char* json = "{\"hashes\":[\"" TRYTES_81_1 "\",\"" TRYTES_81_2 "\"]}";
char* json_result;
ta_find_transactions_res_t* res = ta_find_transactions_res_new();

hash243_queue_push(&res->hashes, TRITS_81_1);
hash243_queue_push(&res->hashes, TRITS_81_2);

ta_find_transactions_res_serialize(&json_result, res);

TEST_ASSERT_EQUAL_STRING(json, json_result);
ta_find_transactions_res_free(&res);
free(json_result);
}

int main(void) {
UNITY_BEGIN();

Expand All @@ -114,6 +142,8 @@ int main(void) {
RUN_TEST(test_serialize_ta_send_transfer);
RUN_TEST(test_deserialize_ta_get_transaction_msg);
RUN_TEST(test_serialize_ta_get_transaction_msg);
RUN_TEST(test_deserialize_ta_find_transactions_by_tag);
RUN_TEST(test_serialize_ta_find_transactions_by_tag);

return UNITY_END();
}