diff --git a/README.md b/README.md
index f00b7e2..967df3d 100644
--- a/README.md
+++ b/README.md
@@ -129,6 +129,8 @@ Class | Method | HTTP request | Description
*BinariesApi* | [**getBinaryExternals**](docs/BinariesApi.md#getBinaryExternals) | **GET** /v2/binaries/{binary_id}/externals | Gets the external details of a binary
*BinariesApi* | [**getBinaryRelatedStatus**](docs/BinariesApi.md#getBinaryRelatedStatus) | **GET** /v2/binaries/{binary_id}/related/status | Gets the status of the unpack binary task for a binary
*BinariesApi* | [**getRelatedBinaries**](docs/BinariesApi.md#getRelatedBinaries) | **GET** /v2/binaries/{binary_id}/related | Gets the related binaries of a binary.
+*BinariesCoreApi* | [**getBinaryAdditionalDetails**](docs/BinariesCoreApi.md#getBinaryAdditionalDetails) | **GET** /v3/binaries/{binary_id}/additional-details | Get additional details for a binary.
+*BinariesCoreApi* | [**getBinaryAdditionalDetailsStatus**](docs/BinariesCoreApi.md#getBinaryAdditionalDetailsStatus) | **GET** /v3/binaries/{binary_id}/additional-details/status | Get the additional-details extraction status for a binary.
*CollectionsApi* | [**createCollection**](docs/CollectionsApi.md#createCollection) | **POST** /v2/collections | Creates new collection information
*CollectionsApi* | [**deleteCollection**](docs/CollectionsApi.md#deleteCollection) | **DELETE** /v2/collections/{collection_id} | Deletes a collection
*CollectionsApi* | [**getCollection**](docs/CollectionsApi.md#getCollection) | **GET** /v2/collections/{collection_id} | Returns a collection
@@ -477,6 +479,8 @@ Class | Method | HTTP request | Description
- [GenerateFunctionDataTypes](docs/GenerateFunctionDataTypes.md)
- [GeneratePDFOutputBody](docs/GeneratePDFOutputBody.md)
- [GenerationStatusList](docs/GenerationStatusList.md)
+ - [GetAdditionalDetailsOutputBody](docs/GetAdditionalDetailsOutputBody.md)
+ - [GetAdditionalDetailsStatusOutputBody](docs/GetAdditionalDetailsStatusOutputBody.md)
- [GetAiDecompilationRatingResponse](docs/GetAiDecompilationRatingResponse.md)
- [GetAiDecompilationTask](docs/GetAiDecompilationTask.md)
- [GetAnalysisStringsStatusOutputBody](docs/GetAnalysisStringsStatusOutputBody.md)
diff --git a/docs/BinariesCoreApi.md b/docs/BinariesCoreApi.md
new file mode 100644
index 0000000..3afd528
--- /dev/null
+++ b/docs/BinariesCoreApi.md
@@ -0,0 +1,156 @@
+# BinariesCoreApi
+
+All URIs are relative to *https://api.reveng.ai*
+
+| Method | HTTP request | Description |
+|------------- | ------------- | -------------|
+| [**getBinaryAdditionalDetails**](BinariesCoreApi.md#getBinaryAdditionalDetails) | **GET** /v3/binaries/{binary_id}/additional-details | Get additional details for a binary. |
+| [**getBinaryAdditionalDetailsStatus**](BinariesCoreApi.md#getBinaryAdditionalDetailsStatus) | **GET** /v3/binaries/{binary_id}/additional-details/status | Get the additional-details extraction status for a binary. |
+
+
+
+# **getBinaryAdditionalDetails**
+> GetAdditionalDetailsOutputBody getBinaryAdditionalDetails(binaryId)
+
+Get additional details for a binary.
+
+Returns structured metadata extracted by the additional-details pipeline for the given binary. Returns `null` for `details` when the pipeline has not yet run. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.BinariesCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ BinariesCoreApi apiInstance = new BinariesCoreApi(defaultClient);
+ Long binaryId = 56L; // Long | Binary ID
+ try {
+ GetAdditionalDetailsOutputBody result = apiInstance.getBinaryAdditionalDetails(binaryId);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling BinariesCoreApi#getBinaryAdditionalDetails");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **binaryId** | **Long**| Binary ID | |
+
+### Return type
+
+[**GetAdditionalDetailsOutputBody**](GetAdditionalDetailsOutputBody.md)
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
+
+# **getBinaryAdditionalDetailsStatus**
+> GetAdditionalDetailsStatusOutputBody getBinaryAdditionalDetailsStatus(binaryId)
+
+Get the additional-details extraction status for a binary.
+
+Returns the status of the additional-details extraction task. One of `UNINITIALISED`, `PENDING`, `RUNNING`, `COMPLETED`, `FAILED`. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+
+### Example
+```java
+// Import classes:
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.auth.*;
+import ai.reveng.invoker.models.*;
+import ai.reveng.api.BinariesCoreApi;
+
+public class Example {
+ public static void main(String[] args) {
+ ApiClient defaultClient = Configuration.getDefaultApiClient();
+ defaultClient.setBasePath("https://api.reveng.ai");
+
+ // Configure API key authorization: APIKey
+ ApiKeyAuth APIKey = (ApiKeyAuth) defaultClient.getAuthentication("APIKey");
+ APIKey.setApiKey("YOUR API KEY");
+ // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
+ //APIKey.setApiKeyPrefix("Token");
+
+ BinariesCoreApi apiInstance = new BinariesCoreApi(defaultClient);
+ Long binaryId = 56L; // Long | Binary ID
+ try {
+ GetAdditionalDetailsStatusOutputBody result = apiInstance.getBinaryAdditionalDetailsStatus(binaryId);
+ System.out.println(result);
+ } catch (ApiException e) {
+ System.err.println("Exception when calling BinariesCoreApi#getBinaryAdditionalDetailsStatus");
+ System.err.println("Status code: " + e.getCode());
+ System.err.println("Reason: " + e.getResponseBody());
+ System.err.println("Response headers: " + e.getResponseHeaders());
+ e.printStackTrace();
+ }
+ }
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **binaryId** | **Long**| Binary ID | |
+
+### Return type
+
+[**GetAdditionalDetailsStatusOutputBody**](GetAdditionalDetailsStatusOutputBody.md)
+
+### Authorization
+
+[APIKey](../README.md#APIKey)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **422** | Unprocessable Entity | - |
+| **500** | Internal Server Error | - |
+
diff --git a/docs/GetAdditionalDetailsOutputBody.md b/docs/GetAdditionalDetailsOutputBody.md
new file mode 100644
index 0000000..f9665e9
--- /dev/null
+++ b/docs/GetAdditionalDetailsOutputBody.md
@@ -0,0 +1,14 @@
+
+
+# GetAdditionalDetailsOutputBody
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**binaryId** | **Long** | | |
+|**details** | **Object** | | |
+
+
+
diff --git a/docs/GetAdditionalDetailsStatusOutputBody.md b/docs/GetAdditionalDetailsStatusOutputBody.md
new file mode 100644
index 0000000..63b52f0
--- /dev/null
+++ b/docs/GetAdditionalDetailsStatusOutputBody.md
@@ -0,0 +1,13 @@
+
+
+# GetAdditionalDetailsStatusOutputBody
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | **String** | | |
+
+
+
diff --git a/src/main/java/ai/reveng/api/BinariesCoreApi.java b/src/main/java/ai/reveng/api/BinariesCoreApi.java
new file mode 100644
index 0000000..cec9f48
--- /dev/null
+++ b/src/main/java/ai/reveng/api/BinariesCoreApi.java
@@ -0,0 +1,362 @@
+/*
+ * RevEng.AI API
+ * RevEng.AI is an AI-powered binary analysis platform for reverse engineering and malware analysis. It provides similarity search across executable binaries and functions, AI-driven decompilation, dynamic execution analysis, firmware unpacking, and integration with external threat intelligence sources like VirusTotal.
+ *
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package ai.reveng.api;
+
+import ai.reveng.invoker.ApiCallback;
+import ai.reveng.invoker.ApiClient;
+import ai.reveng.invoker.ApiException;
+import ai.reveng.invoker.ApiResponse;
+import ai.reveng.invoker.Configuration;
+import ai.reveng.invoker.Pair;
+import ai.reveng.invoker.ProgressRequestBody;
+import ai.reveng.invoker.ProgressResponseBody;
+
+import com.google.gson.reflect.TypeToken;
+
+import java.io.IOException;
+
+
+import ai.reveng.model.APIError;
+import ai.reveng.model.GetAdditionalDetailsOutputBody;
+import ai.reveng.model.GetAdditionalDetailsStatusOutputBody;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class BinariesCoreApi {
+ private ApiClient localVarApiClient;
+ private int localHostIndex;
+ private String localCustomBaseUrl;
+
+ public BinariesCoreApi() {
+ this(Configuration.getDefaultApiClient());
+ }
+
+ public BinariesCoreApi(ApiClient apiClient) {
+ this.localVarApiClient = apiClient;
+ }
+
+ public ApiClient getApiClient() {
+ return localVarApiClient;
+ }
+
+ public void setApiClient(ApiClient apiClient) {
+ this.localVarApiClient = apiClient;
+ }
+
+ public int getHostIndex() {
+ return localHostIndex;
+ }
+
+ public void setHostIndex(int hostIndex) {
+ this.localHostIndex = hostIndex;
+ }
+
+ public String getCustomBaseUrl() {
+ return localCustomBaseUrl;
+ }
+
+ public void setCustomBaseUrl(String customBaseUrl) {
+ this.localCustomBaseUrl = customBaseUrl;
+ }
+
+ /**
+ * Build call for getBinaryAdditionalDetails
+ * @param binaryId Binary ID (required)
+ * @param _callback Callback for upload/download progress
+ * @return Call to execute
+ * @throws ApiException If fail to serialize the request body object
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public okhttp3.Call getBinaryAdditionalDetailsCall(@javax.annotation.Nonnull Long binaryId, final ApiCallback _callback) throws ApiException {
+ String basePath = null;
+ // Operation Servers
+ String[] localBasePaths = new String[] { };
+
+ // Determine Base Path to Use
+ if (localCustomBaseUrl != null){
+ basePath = localCustomBaseUrl;
+ } else if ( localBasePaths.length > 0 ) {
+ basePath = localBasePaths[localHostIndex];
+ } else {
+ basePath = null;
+ }
+
+ Object localVarPostBody = null;
+
+ // create path and map variables
+ String localVarPath = "/v3/binaries/{binary_id}/additional-details"
+ .replace("{" + "binary_id" + "}", localVarApiClient.escapeString(binaryId.toString()));
+
+ List localVarQueryParams = new ArrayList();
+ List localVarCollectionQueryParams = new ArrayList();
+ Map localVarHeaderParams = new HashMap();
+ Map localVarCookieParams = new HashMap();
+ Map localVarFormParams = new HashMap();
+
+ final String[] localVarAccepts = {
+ "application/json"
+ };
+ final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
+ if (localVarAccept != null) {
+ localVarHeaderParams.put("Accept", localVarAccept);
+ }
+
+ final String[] localVarContentTypes = {
+ };
+ final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
+ if (localVarContentType != null) {
+ localVarHeaderParams.put("Content-Type", localVarContentType);
+ }
+
+ String[] localVarAuthNames = new String[] { "APIKey" };
+ return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
+ }
+
+ @SuppressWarnings("rawtypes")
+ private okhttp3.Call getBinaryAdditionalDetailsValidateBeforeCall(@javax.annotation.Nonnull Long binaryId, final ApiCallback _callback) throws ApiException {
+ // verify the required parameter 'binaryId' is set
+ if (binaryId == null) {
+ throw new ApiException("Missing the required parameter 'binaryId' when calling getBinaryAdditionalDetails(Async)");
+ }
+
+ return getBinaryAdditionalDetailsCall(binaryId, _callback);
+
+ }
+
+ /**
+ * Get additional details for a binary.
+ * Returns structured metadata extracted by the additional-details pipeline for the given binary. Returns `null` for `details` when the pipeline has not yet run. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param binaryId Binary ID (required)
+ * @return GetAdditionalDetailsOutputBody
+ * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public GetAdditionalDetailsOutputBody getBinaryAdditionalDetails(@javax.annotation.Nonnull Long binaryId) throws ApiException {
+ ApiResponse localVarResp = getBinaryAdditionalDetailsWithHttpInfo(binaryId);
+ return localVarResp.getData();
+ }
+
+ /**
+ * Get additional details for a binary.
+ * Returns structured metadata extracted by the additional-details pipeline for the given binary. Returns `null` for `details` when the pipeline has not yet run. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param binaryId Binary ID (required)
+ * @return ApiResponse<GetAdditionalDetailsOutputBody>
+ * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public ApiResponse getBinaryAdditionalDetailsWithHttpInfo(@javax.annotation.Nonnull Long binaryId) throws ApiException {
+ okhttp3.Call localVarCall = getBinaryAdditionalDetailsValidateBeforeCall(binaryId, null);
+ Type localVarReturnType = new TypeToken(){}.getType();
+ return localVarApiClient.execute(localVarCall, localVarReturnType);
+ }
+
+ /**
+ * Get additional details for a binary. (asynchronously)
+ * Returns structured metadata extracted by the additional-details pipeline for the given binary. Returns `null` for `details` when the pipeline has not yet run. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param binaryId Binary ID (required)
+ * @param _callback The callback to be executed when the API call finishes
+ * @return The request call
+ * @throws ApiException If fail to process the API call, e.g. serializing the request body object
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public okhttp3.Call getBinaryAdditionalDetailsAsync(@javax.annotation.Nonnull Long binaryId, final ApiCallback _callback) throws ApiException {
+
+ okhttp3.Call localVarCall = getBinaryAdditionalDetailsValidateBeforeCall(binaryId, _callback);
+ Type localVarReturnType = new TypeToken(){}.getType();
+ localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
+ return localVarCall;
+ }
+ /**
+ * Build call for getBinaryAdditionalDetailsStatus
+ * @param binaryId Binary ID (required)
+ * @param _callback Callback for upload/download progress
+ * @return Call to execute
+ * @throws ApiException If fail to serialize the request body object
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public okhttp3.Call getBinaryAdditionalDetailsStatusCall(@javax.annotation.Nonnull Long binaryId, final ApiCallback _callback) throws ApiException {
+ String basePath = null;
+ // Operation Servers
+ String[] localBasePaths = new String[] { };
+
+ // Determine Base Path to Use
+ if (localCustomBaseUrl != null){
+ basePath = localCustomBaseUrl;
+ } else if ( localBasePaths.length > 0 ) {
+ basePath = localBasePaths[localHostIndex];
+ } else {
+ basePath = null;
+ }
+
+ Object localVarPostBody = null;
+
+ // create path and map variables
+ String localVarPath = "/v3/binaries/{binary_id}/additional-details/status"
+ .replace("{" + "binary_id" + "}", localVarApiClient.escapeString(binaryId.toString()));
+
+ List localVarQueryParams = new ArrayList();
+ List localVarCollectionQueryParams = new ArrayList();
+ Map localVarHeaderParams = new HashMap();
+ Map localVarCookieParams = new HashMap();
+ Map localVarFormParams = new HashMap();
+
+ final String[] localVarAccepts = {
+ "application/json"
+ };
+ final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
+ if (localVarAccept != null) {
+ localVarHeaderParams.put("Accept", localVarAccept);
+ }
+
+ final String[] localVarContentTypes = {
+ };
+ final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
+ if (localVarContentType != null) {
+ localVarHeaderParams.put("Content-Type", localVarContentType);
+ }
+
+ String[] localVarAuthNames = new String[] { "APIKey" };
+ return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
+ }
+
+ @SuppressWarnings("rawtypes")
+ private okhttp3.Call getBinaryAdditionalDetailsStatusValidateBeforeCall(@javax.annotation.Nonnull Long binaryId, final ApiCallback _callback) throws ApiException {
+ // verify the required parameter 'binaryId' is set
+ if (binaryId == null) {
+ throw new ApiException("Missing the required parameter 'binaryId' when calling getBinaryAdditionalDetailsStatus(Async)");
+ }
+
+ return getBinaryAdditionalDetailsStatusCall(binaryId, _callback);
+
+ }
+
+ /**
+ * Get the additional-details extraction status for a binary.
+ * Returns the status of the additional-details extraction task. One of `UNINITIALISED`, `PENDING`, `RUNNING`, `COMPLETED`, `FAILED`. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param binaryId Binary ID (required)
+ * @return GetAdditionalDetailsStatusOutputBody
+ * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public GetAdditionalDetailsStatusOutputBody getBinaryAdditionalDetailsStatus(@javax.annotation.Nonnull Long binaryId) throws ApiException {
+ ApiResponse localVarResp = getBinaryAdditionalDetailsStatusWithHttpInfo(binaryId);
+ return localVarResp.getData();
+ }
+
+ /**
+ * Get the additional-details extraction status for a binary.
+ * Returns the status of the additional-details extraction task. One of `UNINITIALISED`, `PENDING`, `RUNNING`, `COMPLETED`, `FAILED`. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param binaryId Binary ID (required)
+ * @return ApiResponse<GetAdditionalDetailsStatusOutputBody>
+ * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public ApiResponse getBinaryAdditionalDetailsStatusWithHttpInfo(@javax.annotation.Nonnull Long binaryId) throws ApiException {
+ okhttp3.Call localVarCall = getBinaryAdditionalDetailsStatusValidateBeforeCall(binaryId, null);
+ Type localVarReturnType = new TypeToken(){}.getType();
+ return localVarApiClient.execute(localVarCall, localVarReturnType);
+ }
+
+ /**
+ * Get the additional-details extraction status for a binary. (asynchronously)
+ * Returns the status of the additional-details extraction task. One of `UNINITIALISED`, `PENDING`, `RUNNING`, `COMPLETED`, `FAILED`. **Error codes:** - `404` [`NOT_FOUND`](/errors/NOT_FOUND) — Not Found - `403` [`ACCESS_DENIED`](/errors/ACCESS_DENIED) — Access Denied
+ * @param binaryId Binary ID (required)
+ * @param _callback The callback to be executed when the API call finishes
+ * @return The request call
+ * @throws ApiException If fail to process the API call, e.g. serializing the request body object
+ * @http.response.details
+
+ Response Details
+ | Status Code | Description | Response Headers |
+ | 200 | OK | - |
+ | 403 | Forbidden | - |
+ | 404 | Not Found | - |
+ | 422 | Unprocessable Entity | - |
+ | 500 | Internal Server Error | - |
+
+ */
+ public okhttp3.Call getBinaryAdditionalDetailsStatusAsync(@javax.annotation.Nonnull Long binaryId, final ApiCallback _callback) throws ApiException {
+
+ okhttp3.Call localVarCall = getBinaryAdditionalDetailsStatusValidateBeforeCall(binaryId, _callback);
+ Type localVarReturnType = new TypeToken(){}.getType();
+ localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
+ return localVarCall;
+ }
+}
diff --git a/src/main/java/ai/reveng/invoker/JSON.java b/src/main/java/ai/reveng/invoker/JSON.java
index 7639e1a..e34902c 100644
--- a/src/main/java/ai/reveng/invoker/JSON.java
+++ b/src/main/java/ai/reveng/invoker/JSON.java
@@ -347,6 +347,8 @@ private static Class getClassByDiscriminator(Map classByDiscriminatorValue, Stri
gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GenerateFunctionDataTypes.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GeneratePDFOutputBody.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GenerationStatusList.CustomTypeAdapterFactory());
+ gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GetAdditionalDetailsOutputBody.CustomTypeAdapterFactory());
+ gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GetAdditionalDetailsStatusOutputBody.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GetAiDecompilationRatingResponse.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GetAiDecompilationTask.CustomTypeAdapterFactory());
gsonBuilder.registerTypeAdapterFactory(new ai.reveng.model.GetAnalysisStringsStatusOutputBody.CustomTypeAdapterFactory());
diff --git a/src/main/java/ai/reveng/model/GetAdditionalDetailsOutputBody.java b/src/main/java/ai/reveng/model/GetAdditionalDetailsOutputBody.java
new file mode 100644
index 0000000..32431df
--- /dev/null
+++ b/src/main/java/ai/reveng/model/GetAdditionalDetailsOutputBody.java
@@ -0,0 +1,317 @@
+/*
+ * RevEng.AI API
+ * RevEng.AI is an AI-powered binary analysis platform for reverse engineering and malware analysis. It provides similarity search across executable binaries and functions, AI-driven decompilation, dynamic execution analysis, firmware unpacking, and integration with external threat intelligence sources like VirusTotal.
+ *
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package ai.reveng.model;
+
+import java.util.Objects;
+import java.util.Locale;
+import com.google.gson.TypeAdapter;
+import com.google.gson.annotations.JsonAdapter;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+import java.io.IOException;
+import java.util.Arrays;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.TypeAdapterFactory;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+import java.io.IOException;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Locale;
+
+import ai.reveng.invoker.JSON;
+
+/**
+ * GetAdditionalDetailsOutputBody
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
+public class GetAdditionalDetailsOutputBody {
+ public static final String SERIALIZED_NAME_BINARY_ID = "binary_id";
+ @SerializedName(SERIALIZED_NAME_BINARY_ID)
+ @javax.annotation.Nonnull
+ private Long binaryId;
+
+ public static final String SERIALIZED_NAME_DETAILS = "details";
+ @SerializedName(SERIALIZED_NAME_DETAILS)
+ @javax.annotation.Nullable
+ private Object details = null;
+
+ public GetAdditionalDetailsOutputBody() {
+ }
+
+ public GetAdditionalDetailsOutputBody binaryId(@javax.annotation.Nonnull Long binaryId) {
+ this.binaryId = binaryId;
+ return this;
+ }
+
+ /**
+ * Get binaryId
+ * @return binaryId
+ */
+ @javax.annotation.Nonnull
+ public Long getBinaryId() {
+ return binaryId;
+ }
+
+ public void setBinaryId(@javax.annotation.Nonnull Long binaryId) {
+ this.binaryId = binaryId;
+ }
+
+
+ public GetAdditionalDetailsOutputBody details(@javax.annotation.Nullable Object details) {
+ this.details = details;
+ return this;
+ }
+
+ /**
+ * Get details
+ * @return details
+ */
+ @javax.annotation.Nullable
+ public Object getDetails() {
+ return details;
+ }
+
+ public void setDetails(@javax.annotation.Nullable Object details) {
+ this.details = details;
+ }
+
+ /**
+ * A container for additional, undeclared properties.
+ * This is a holder for any undeclared properties as specified with
+ * the 'additionalProperties' keyword in the OAS document.
+ */
+ private Map additionalProperties;
+
+ /**
+ * Set the additional (undeclared) property with the specified name and value.
+ * If the property does not already exist, create it otherwise replace it.
+ *
+ * @param key name of the property
+ * @param value value of the property
+ * @return the GetAdditionalDetailsOutputBody instance itself
+ */
+ public GetAdditionalDetailsOutputBody putAdditionalProperty(String key, Object value) {
+ if (this.additionalProperties == null) {
+ this.additionalProperties = new HashMap();
+ }
+ this.additionalProperties.put(key, value);
+ return this;
+ }
+
+ /**
+ * Return the additional (undeclared) property.
+ *
+ * @return a map of objects
+ */
+ public Map getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ /**
+ * Return the additional (undeclared) property with the specified name.
+ *
+ * @param key name of the property
+ * @return an object
+ */
+ public Object getAdditionalProperty(String key) {
+ if (this.additionalProperties == null) {
+ return null;
+ }
+ return this.additionalProperties.get(key);
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ GetAdditionalDetailsOutputBody getAdditionalDetailsOutputBody = (GetAdditionalDetailsOutputBody) o;
+ return Objects.equals(this.binaryId, getAdditionalDetailsOutputBody.binaryId) &&
+ Objects.equals(this.details, getAdditionalDetailsOutputBody.details)&&
+ Objects.equals(this.additionalProperties, getAdditionalDetailsOutputBody.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(binaryId, details, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class GetAdditionalDetailsOutputBody {\n");
+ sb.append(" binaryId: ").append(toIndentedString(binaryId)).append("\n");
+ sb.append(" details: ").append(toIndentedString(details)).append("\n");
+ sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+
+ public static HashSet openapiFields;
+ public static HashSet openapiRequiredFields;
+
+ static {
+ // a set of all properties/fields (JSON key names)
+ openapiFields = new HashSet(Arrays.asList("binary_id", "details"));
+
+ // a set of required properties/fields (JSON key names)
+ openapiRequiredFields = new HashSet(Arrays.asList("binary_id", "details"));
+ }
+
+ /**
+ * Validates the JSON Element and throws an exception if issues found
+ *
+ * @param jsonElement JSON Element
+ * @throws IOException if the JSON Element is invalid with respect to GetAdditionalDetailsOutputBody
+ */
+ public static void validateJsonElement(JsonElement jsonElement) throws IOException {
+ if (jsonElement == null) {
+ if (!GetAdditionalDetailsOutputBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "The required field(s) %s in GetAdditionalDetailsOutputBody is not found in the empty JSON string", GetAdditionalDetailsOutputBody.openapiRequiredFields.toString()));
+ }
+ }
+
+ // check to make sure all required properties/fields are present in the JSON string
+ for (String requiredField : GetAdditionalDetailsOutputBody.openapiRequiredFields) {
+ if (jsonElement.getAsJsonObject().get(requiredField) == null) {
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "The required field `%s` is not found in the JSON string: %s", requiredField, jsonElement.toString()));
+ }
+ }
+ JsonObject jsonObj = jsonElement.getAsJsonObject();
+ }
+
+ public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
+ @SuppressWarnings("unchecked")
+ @Override
+ public TypeAdapter create(Gson gson, TypeToken type) {
+ if (!GetAdditionalDetailsOutputBody.class.isAssignableFrom(type.getRawType())) {
+ return null; // this class only serializes 'GetAdditionalDetailsOutputBody' and its subtypes
+ }
+ final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class);
+ final TypeAdapter thisAdapter
+ = gson.getDelegateAdapter(this, TypeToken.get(GetAdditionalDetailsOutputBody.class));
+
+ return (TypeAdapter) new TypeAdapter() {
+ @Override
+ public void write(JsonWriter out, GetAdditionalDetailsOutputBody value) throws IOException {
+ JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
+ obj.remove("additionalProperties");
+ // serialize additional properties
+ if (value.getAdditionalProperties() != null) {
+ for (Map.Entry entry : value.getAdditionalProperties().entrySet()) {
+ if (entry.getValue() instanceof String)
+ obj.addProperty(entry.getKey(), (String) entry.getValue());
+ else if (entry.getValue() instanceof Number)
+ obj.addProperty(entry.getKey(), (Number) entry.getValue());
+ else if (entry.getValue() instanceof Boolean)
+ obj.addProperty(entry.getKey(), (Boolean) entry.getValue());
+ else if (entry.getValue() instanceof Character)
+ obj.addProperty(entry.getKey(), (Character) entry.getValue());
+ else {
+ JsonElement jsonElement = gson.toJsonTree(entry.getValue());
+ if (jsonElement.isJsonArray()) {
+ obj.add(entry.getKey(), jsonElement.getAsJsonArray());
+ } else {
+ obj.add(entry.getKey(), jsonElement.getAsJsonObject());
+ }
+ }
+ }
+ }
+ elementAdapter.write(out, obj);
+ }
+
+ @Override
+ public GetAdditionalDetailsOutputBody read(JsonReader in) throws IOException {
+ JsonElement jsonElement = elementAdapter.read(in);
+ validateJsonElement(jsonElement);
+ JsonObject jsonObj = jsonElement.getAsJsonObject();
+ // store additional fields in the deserialized instance
+ GetAdditionalDetailsOutputBody instance = thisAdapter.fromJsonTree(jsonObj);
+ for (Map.Entry entry : jsonObj.entrySet()) {
+ if (!openapiFields.contains(entry.getKey())) {
+ if (entry.getValue().isJsonPrimitive()) { // primitive type
+ if (entry.getValue().getAsJsonPrimitive().isString())
+ instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString());
+ else if (entry.getValue().getAsJsonPrimitive().isNumber())
+ instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber());
+ else if (entry.getValue().getAsJsonPrimitive().isBoolean())
+ instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean());
+ else
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString()));
+ } else if (entry.getValue().isJsonArray()) {
+ instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), List.class));
+ } else { // JSON object
+ instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class));
+ }
+ }
+ }
+ return instance;
+ }
+
+ }.nullSafe();
+ }
+ }
+
+ /**
+ * Create an instance of GetAdditionalDetailsOutputBody given an JSON string
+ *
+ * @param jsonString JSON string
+ * @return An instance of GetAdditionalDetailsOutputBody
+ * @throws IOException if the JSON string is invalid with respect to GetAdditionalDetailsOutputBody
+ */
+ public static GetAdditionalDetailsOutputBody fromJson(String jsonString) throws IOException {
+ return JSON.getGson().fromJson(jsonString, GetAdditionalDetailsOutputBody.class);
+ }
+
+ /**
+ * Convert an instance of GetAdditionalDetailsOutputBody to an JSON string
+ *
+ * @return JSON string
+ */
+ public String toJson() {
+ return JSON.getGson().toJson(this);
+ }
+}
+
diff --git a/src/main/java/ai/reveng/model/GetAdditionalDetailsStatusOutputBody.java b/src/main/java/ai/reveng/model/GetAdditionalDetailsStatusOutputBody.java
new file mode 100644
index 0000000..358b556
--- /dev/null
+++ b/src/main/java/ai/reveng/model/GetAdditionalDetailsStatusOutputBody.java
@@ -0,0 +1,294 @@
+/*
+ * RevEng.AI API
+ * RevEng.AI is an AI-powered binary analysis platform for reverse engineering and malware analysis. It provides similarity search across executable binaries and functions, AI-driven decompilation, dynamic execution analysis, firmware unpacking, and integration with external threat intelligence sources like VirusTotal.
+ *
+ *
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package ai.reveng.model;
+
+import java.util.Objects;
+import java.util.Locale;
+import com.google.gson.TypeAdapter;
+import com.google.gson.annotations.JsonAdapter;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+import java.io.IOException;
+import java.util.Arrays;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.TypeAdapterFactory;
+import com.google.gson.reflect.TypeToken;
+import com.google.gson.TypeAdapter;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.stream.JsonWriter;
+import java.io.IOException;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Locale;
+
+import ai.reveng.invoker.JSON;
+
+/**
+ * GetAdditionalDetailsStatusOutputBody
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen")
+public class GetAdditionalDetailsStatusOutputBody {
+ public static final String SERIALIZED_NAME_STATUS = "status";
+ @SerializedName(SERIALIZED_NAME_STATUS)
+ @javax.annotation.Nonnull
+ private String status;
+
+ public GetAdditionalDetailsStatusOutputBody() {
+ }
+
+ public GetAdditionalDetailsStatusOutputBody status(@javax.annotation.Nonnull String status) {
+ this.status = status;
+ return this;
+ }
+
+ /**
+ * Get status
+ * @return status
+ */
+ @javax.annotation.Nonnull
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(@javax.annotation.Nonnull String status) {
+ this.status = status;
+ }
+
+ /**
+ * A container for additional, undeclared properties.
+ * This is a holder for any undeclared properties as specified with
+ * the 'additionalProperties' keyword in the OAS document.
+ */
+ private Map additionalProperties;
+
+ /**
+ * Set the additional (undeclared) property with the specified name and value.
+ * If the property does not already exist, create it otherwise replace it.
+ *
+ * @param key name of the property
+ * @param value value of the property
+ * @return the GetAdditionalDetailsStatusOutputBody instance itself
+ */
+ public GetAdditionalDetailsStatusOutputBody putAdditionalProperty(String key, Object value) {
+ if (this.additionalProperties == null) {
+ this.additionalProperties = new HashMap();
+ }
+ this.additionalProperties.put(key, value);
+ return this;
+ }
+
+ /**
+ * Return the additional (undeclared) property.
+ *
+ * @return a map of objects
+ */
+ public Map getAdditionalProperties() {
+ return additionalProperties;
+ }
+
+ /**
+ * Return the additional (undeclared) property with the specified name.
+ *
+ * @param key name of the property
+ * @return an object
+ */
+ public Object getAdditionalProperty(String key) {
+ if (this.additionalProperties == null) {
+ return null;
+ }
+ return this.additionalProperties.get(key);
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ GetAdditionalDetailsStatusOutputBody getAdditionalDetailsStatusOutputBody = (GetAdditionalDetailsStatusOutputBody) o;
+ return Objects.equals(this.status, getAdditionalDetailsStatusOutputBody.status)&&
+ Objects.equals(this.additionalProperties, getAdditionalDetailsStatusOutputBody.additionalProperties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(status, additionalProperties);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class GetAdditionalDetailsStatusOutputBody {\n");
+ sb.append(" status: ").append(toIndentedString(status)).append("\n");
+ sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+
+
+ public static HashSet openapiFields;
+ public static HashSet openapiRequiredFields;
+
+ static {
+ // a set of all properties/fields (JSON key names)
+ openapiFields = new HashSet(Arrays.asList("status"));
+
+ // a set of required properties/fields (JSON key names)
+ openapiRequiredFields = new HashSet(Arrays.asList("status"));
+ }
+
+ /**
+ * Validates the JSON Element and throws an exception if issues found
+ *
+ * @param jsonElement JSON Element
+ * @throws IOException if the JSON Element is invalid with respect to GetAdditionalDetailsStatusOutputBody
+ */
+ public static void validateJsonElement(JsonElement jsonElement) throws IOException {
+ if (jsonElement == null) {
+ if (!GetAdditionalDetailsStatusOutputBody.openapiRequiredFields.isEmpty()) { // has required fields but JSON element is null
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "The required field(s) %s in GetAdditionalDetailsStatusOutputBody is not found in the empty JSON string", GetAdditionalDetailsStatusOutputBody.openapiRequiredFields.toString()));
+ }
+ }
+
+ // check to make sure all required properties/fields are present in the JSON string
+ for (String requiredField : GetAdditionalDetailsStatusOutputBody.openapiRequiredFields) {
+ if (jsonElement.getAsJsonObject().get(requiredField) == null) {
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "The required field `%s` is not found in the JSON string: %s", requiredField, jsonElement.toString()));
+ }
+ }
+ JsonObject jsonObj = jsonElement.getAsJsonObject();
+ if (!jsonObj.get("status").isJsonPrimitive()) {
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "Expected the field `status` to be a primitive type in the JSON string but got `%s`", jsonObj.get("status").toString()));
+ }
+ }
+
+ public static class CustomTypeAdapterFactory implements TypeAdapterFactory {
+ @SuppressWarnings("unchecked")
+ @Override
+ public TypeAdapter create(Gson gson, TypeToken type) {
+ if (!GetAdditionalDetailsStatusOutputBody.class.isAssignableFrom(type.getRawType())) {
+ return null; // this class only serializes 'GetAdditionalDetailsStatusOutputBody' and its subtypes
+ }
+ final TypeAdapter elementAdapter = gson.getAdapter(JsonElement.class);
+ final TypeAdapter thisAdapter
+ = gson.getDelegateAdapter(this, TypeToken.get(GetAdditionalDetailsStatusOutputBody.class));
+
+ return (TypeAdapter) new TypeAdapter() {
+ @Override
+ public void write(JsonWriter out, GetAdditionalDetailsStatusOutputBody value) throws IOException {
+ JsonObject obj = thisAdapter.toJsonTree(value).getAsJsonObject();
+ obj.remove("additionalProperties");
+ // serialize additional properties
+ if (value.getAdditionalProperties() != null) {
+ for (Map.Entry entry : value.getAdditionalProperties().entrySet()) {
+ if (entry.getValue() instanceof String)
+ obj.addProperty(entry.getKey(), (String) entry.getValue());
+ else if (entry.getValue() instanceof Number)
+ obj.addProperty(entry.getKey(), (Number) entry.getValue());
+ else if (entry.getValue() instanceof Boolean)
+ obj.addProperty(entry.getKey(), (Boolean) entry.getValue());
+ else if (entry.getValue() instanceof Character)
+ obj.addProperty(entry.getKey(), (Character) entry.getValue());
+ else {
+ JsonElement jsonElement = gson.toJsonTree(entry.getValue());
+ if (jsonElement.isJsonArray()) {
+ obj.add(entry.getKey(), jsonElement.getAsJsonArray());
+ } else {
+ obj.add(entry.getKey(), jsonElement.getAsJsonObject());
+ }
+ }
+ }
+ }
+ elementAdapter.write(out, obj);
+ }
+
+ @Override
+ public GetAdditionalDetailsStatusOutputBody read(JsonReader in) throws IOException {
+ JsonElement jsonElement = elementAdapter.read(in);
+ validateJsonElement(jsonElement);
+ JsonObject jsonObj = jsonElement.getAsJsonObject();
+ // store additional fields in the deserialized instance
+ GetAdditionalDetailsStatusOutputBody instance = thisAdapter.fromJsonTree(jsonObj);
+ for (Map.Entry entry : jsonObj.entrySet()) {
+ if (!openapiFields.contains(entry.getKey())) {
+ if (entry.getValue().isJsonPrimitive()) { // primitive type
+ if (entry.getValue().getAsJsonPrimitive().isString())
+ instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsString());
+ else if (entry.getValue().getAsJsonPrimitive().isNumber())
+ instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsNumber());
+ else if (entry.getValue().getAsJsonPrimitive().isBoolean())
+ instance.putAdditionalProperty(entry.getKey(), entry.getValue().getAsBoolean());
+ else
+ throw new IllegalArgumentException(String.format(Locale.ROOT, "The field `%s` has unknown primitive type. Value: %s", entry.getKey(), entry.getValue().toString()));
+ } else if (entry.getValue().isJsonArray()) {
+ instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), List.class));
+ } else { // JSON object
+ instance.putAdditionalProperty(entry.getKey(), gson.fromJson(entry.getValue(), HashMap.class));
+ }
+ }
+ }
+ return instance;
+ }
+
+ }.nullSafe();
+ }
+ }
+
+ /**
+ * Create an instance of GetAdditionalDetailsStatusOutputBody given an JSON string
+ *
+ * @param jsonString JSON string
+ * @return An instance of GetAdditionalDetailsStatusOutputBody
+ * @throws IOException if the JSON string is invalid with respect to GetAdditionalDetailsStatusOutputBody
+ */
+ public static GetAdditionalDetailsStatusOutputBody fromJson(String jsonString) throws IOException {
+ return JSON.getGson().fromJson(jsonString, GetAdditionalDetailsStatusOutputBody.class);
+ }
+
+ /**
+ * Convert an instance of GetAdditionalDetailsStatusOutputBody to an JSON string
+ *
+ * @return JSON string
+ */
+ public String toJson() {
+ return JSON.getGson().toJson(this);
+ }
+}
+