1use async_trait::async_trait;
4use serde::{Deserialize, Serialize};
5use std::path::PathBuf;
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct OciBuildRequest {
9 pub service: String,
10 pub image_ref: String,
12 pub dockerfile: Option<String>,
13 pub context: PathBuf,
15 pub platforms: Vec<String>,
16 pub dry_run: bool,
17 pub project_root: PathBuf,
18 pub service_root: Option<PathBuf>,
19 #[serde(default)]
22 pub local_image: bool,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize, Default)]
27pub struct OciBuildResult {
28 pub lines: Vec<String>,
29 pub digest: Option<String>,
31 pub image_ref: Option<String>,
33 #[serde(default)]
35 pub local_only: bool,
36}
37
38#[async_trait]
40pub trait OciBuildAdapter: Send + Sync {
41 async fn build_and_push(&self, request: OciBuildRequest) -> Result<OciBuildResult, String>;
42}