PublicIP: support JSON format

This commit is contained in:
李通洲
2023-09-13 17:47:31 +08:00
parent 28d40d9037
commit f5ad07a87b
3 changed files with 30 additions and 1 deletions
+7
View File
@@ -1,3 +1,8 @@
#pragma once
#ifndef FF_INCLUDED_detection_publicip_publicip
#define FF_INCLUDED_detection_publicip_publicip
#include "fastfetch.h"
typedef struct FFPublicIpResult
@@ -8,3 +13,5 @@ typedef struct FFPublicIpResult
void ffPreparePublicIp(FFPublicIpOptions* options);
const char* ffDetectPublicIp(FFPublicIpOptions* options, FFPublicIpResult* result);
#endif
+22 -1
View File
@@ -42,7 +42,7 @@ void ffPrintPublicIp(FFPublicIpOptions* options)
void ffInitPublicIpOptions(FFPublicIpOptions* options)
{
ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PUBLICIP_MODULE_NAME, ffParsePublicIpCommandOptions, ffParsePublicIpJsonObject, ffPrintPublicIp, NULL);
ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PUBLICIP_MODULE_NAME, ffParsePublicIpCommandOptions, ffParsePublicIpJsonObject, ffPrintPublicIp, ffGeneratePublicIpJson);
ffOptionInitModuleArg(&options->moduleArgs);
ffStrbufInit(&options->url);
@@ -106,3 +106,24 @@ void ffParsePublicIpJsonObject(FFPublicIpOptions* options, yyjson_val* module)
ffPrintError(FF_PUBLICIP_MODULE_NAME, 0, &options->moduleArgs, "Unknown JSON key %s", key);
}
}
void ffGeneratePublicIpJson(FFPublicIpOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module)
{
FFPublicIpResult result;
ffStrbufInit(&result.ip);
ffStrbufInit(&result.location);
const char* error = ffDetectPublicIp(options, &result);
if (error)
{
yyjson_mut_obj_add_str(doc, module, "error", error);
return;
}
yyjson_mut_val* obj = yyjson_mut_obj_add_obj(doc, module, "result");
yyjson_mut_obj_add_strbuf(doc, obj, "ip", &result.ip);
yyjson_mut_obj_add_strbuf(doc, obj, "location", &result.location);
ffStrbufDestroy(&result.ip);
ffStrbufDestroy(&result.location);
}
+1
View File
@@ -11,3 +11,4 @@ void ffInitPublicIpOptions(FFPublicIpOptions* options);
bool ffParsePublicIpCommandOptions(FFPublicIpOptions* options, const char* key, const char* value);
void ffDestroyPublicIpOptions(FFPublicIpOptions* options);
void ffParsePublicIpJsonObject(FFPublicIpOptions* options, yyjson_val* module);
void ffGeneratePublicIpJson(FFPublicIpOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module);