C-FFI binding for YXY
more details: [docs.rs]
Header: [yxy.h]
```c
void query() { char uid[] = "123456789\0"; char *session = auth(uid); if (session == NULL) { printf("auth error\n"); return; } else { printf("session: %s\n", session); }
ele_result *e;
int code = query_ele(session, &e);
if (code) {
printf("query error: %d\n", code);
return;
}
free_c_string(session);
printf("room: %s\nstatus: %s\ntotal surplus: %f %f\nsurplus: %f "
"%f\nsubsidy: %f %f\n",
e->display_room_name, e->room_status, e->total_surplus,
e->total_amount, e->surplus, e->surplus_amount, e->subsidy,
e->subsidy_amount);
free_ele_result(e);
} ```
```c
void login() { login_handle handle;
gen_device_id(&handle);
printf("device_id: %s\n", handle.device_id);
handle.phone_num = "18888888888\0";
security_token_result *sec_token;
int code = get_security_token(&handle, &sec_token);
if (code) {
printf("fail to get security token: %d\n", code);
return;
}
printf("security token: %s\nlevel: %d\n", sec_token->token, sec_token->level);
if (sec_token->level != 0) {
char *image;
code = get_captcha_image(&handle, sec_token->token, &image);
if (code) {
printf("fail to get captcha image: %d\n", code);
return;
}
char captcha_code[5] = {0};
printf("Captcha image: %s\n", image);
printf("Please solve the image captcha and input the code: ");
scanf("%4s", captcha_code);
code = send_verification_code(&handle, sec_token->token, captcha_code);
} else {
code = send_verification_code(&handle, sec_token->token, NULL);
}
if (code == 0 || code == 1) {
printf("send verification code success\n");
} else {
printf("fail to send verification code: %d\n", code);
return;
}
free_security_token_result(sec_token);
char verification_code[7] = {0};
printf("please input verification code:");
scanf("%6s", verification_code);
login_result *l_result;
code = do_login(&handle, verification_code, &l_result);
if (code) {
printf("fail to login: %d\n", code);
return;
}
printf("login success\n");
printf("uid: %s\ntoken: %s\ndivice_id: %s\nbind_card_status: %d\n",
l_result->uid, l_result->token, l_result->device_id,
l_result->bind_card_status);
free_login_result(l_result); // remember to free the memory
free_c_string(handle.device_id);
} ```