#![cfg(feature = "docker_build")]
#![allow(clippy::too_many_arguments, clippy::type_complexity)]
#![allow(clippy::missing_errors_doc, clippy::doc_markdown, clippy::useless_format)]
#![allow(unused_imports)]
use foundation_netio::{DynNetClient, PreparedRequestBuilder};
use foundation_netio::shared::client::http_client::HttpClient;
use serde::{Deserialize, Serialize};
use foundation_macros::JsonHash;
use super::shared::ApiResponse;
#[derive(Debug, Clone, Default, Serialize, JsonHash)]
pub struct ImageBuildArgs {
pub dockerfile: Option<String>,
pub t: Option<String>,
pub extrahosts: Option<String>,
pub remote: Option<String>,
pub q: Option<String>,
pub nocache: Option<String>,
pub cachefrom: Option<String>,
pub pull: Option<String>,
pub rm: Option<String>,
pub forcerm: Option<String>,
pub memory: Option<String>,
pub memswap: Option<String>,
pub cpushares: Option<String>,
pub cpusetcpus: Option<String>,
pub cpuperiod: Option<String>,
pub cpuquota: Option<String>,
pub buildargs: Option<String>,
pub shmsize: Option<String>,
pub squash: Option<String>,
pub labels: Option<String>,
pub networkmode: Option<String>,
pub platform: Option<String>,
pub target: Option<String>,
pub outputs: Option<String>,
pub version: Option<String>,
}
pub async fn image_build_request<F>(
client: DynNetClient,
args: &ImageBuildArgs,
base_url: &str,
builder_mod: Option<F>,
) -> Result<ApiResponse<()>, super::shared::ApiError>
where
F: FnOnce(&mut PreparedRequestBuilder),
{
let path = format!("/build",
);
let endpoint_url = format!("{}{}", base_url, path);
let mut builder = PreparedRequestBuilder::post(&endpoint_url)
.map_err(|e| super::shared::ApiError::RequestBuildFailed(e.to_string()))?;
builder = builder.query("dockerfile", args.dockerfile.as_deref());
builder = builder.query("t", args.t.as_deref());
builder = builder.query("extrahosts", args.extrahosts.as_deref());
builder = builder.query("remote", args.remote.as_deref());
builder = builder.query("q", args.q.as_deref());
builder = builder.query("nocache", args.nocache.as_deref());
builder = builder.query("cachefrom", args.cachefrom.as_deref());
builder = builder.query("pull", args.pull.as_deref());
builder = builder.query("rm", args.rm.as_deref());
builder = builder.query("forcerm", args.forcerm.as_deref());
builder = builder.query("memory", args.memory.as_deref());
builder = builder.query("memswap", args.memswap.as_deref());
builder = builder.query("cpushares", args.cpushares.as_deref());
builder = builder.query("cpusetcpus", args.cpusetcpus.as_deref());
builder = builder.query("cpuperiod", args.cpuperiod.as_deref());
builder = builder.query("cpuquota", args.cpuquota.as_deref());
builder = builder.query("buildargs", args.buildargs.as_deref());
builder = builder.query("shmsize", args.shmsize.as_deref());
builder = builder.query("squash", args.squash.as_deref());
builder = builder.query("labels", args.labels.as_deref());
builder = builder.query("networkmode", args.networkmode.as_deref());
builder = builder.query("platform", args.platform.as_deref());
builder = builder.query("target", args.target.as_deref());
builder = builder.query("outputs", args.outputs.as_deref());
builder = builder.query("version", args.version.as_deref());
if let Some(f) = builder_mod {
f(&mut builder);
}
let response = client.send_async(builder.build()).await
.map_err(|e| super::shared::ApiError::RequestSendFailed(e.to_string()))?;
let status: usize = response.get_status().into();
let headers = response.get_headers_ref().clone();
if status < 200 || status >= 300 {
return Err(super::shared::ApiError::HttpStatus { code: status as u16, headers, body: None });
}
Ok(ApiResponse { status: status as u16, headers, body: () })
}