use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::oss_util;
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Image2imageParam {
#[builder(setter(into, strip_option))]
pub model: String,
pub input: Input,
}
impl Image2imageParam {
pub(crate) async fn upload_file_to_oss(
mut self,
api_key: &str,
) -> Result<Self, crate::error::DashScopeError> {
let oss_url =
oss_util::upload_file_and_get_url(api_key, &self.model, &self.input.image_url).await?;
self.input.image_url = oss_url;
Ok(self)
}
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Input {
#[builder(setter(into))]
pub image_url: String,
#[builder(setter(into))]
pub source_lang: String,
#[builder(setter(into))]
pub target_lang: String,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
pub ext: Option<Ext>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Ext {
#[builder(setter(into, strip_option))]
#[builder(default=None)]
domain_hint: Option<String>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
sensitives: Option<Vec<String>>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
terminologies: Option<Vec<Terminology>>,
#[builder(setter(into, strip_option))]
#[builder(default=None)]
config: Option<Config>,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Terminology {
src: String,
tgt: String,
}
#[derive(Debug, Clone, Builder, Serialize, Deserialize, PartialEq)]
pub struct Config {
skip_img_segment: bool,
}