You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.2 KiB
66 lines
2.2 KiB
use std::convert::TryFrom;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
use serde_with::{serde_as, DisplayFromStr, NoneAsEmptyString};
|
|
|
|
use crate::{domain, error::unexpected, origin};
|
|
|
|
#[serde_as]
|
|
#[derive(Clone, Serialize, Deserialize, Default, Debug)]
|
|
pub struct UrlEncodedDomainSettings {
|
|
domain_setting_origin_descr_kind: String,
|
|
|
|
#[serde_as(as = "Option<DisplayFromStr>")]
|
|
domain_setting_origin_descr_git_url: Option<origin::descr::GitUrl>,
|
|
domain_setting_origin_descr_git_branch_name: Option<String>,
|
|
|
|
domain_setting_origin_descr_proxy_url: Option<String>,
|
|
|
|
#[serde(default)]
|
|
#[serde_as(as = "NoneAsEmptyString")]
|
|
domain_setting_add_path_prefix: Option<String>,
|
|
}
|
|
|
|
impl TryFrom<UrlEncodedDomainSettings> for domain::Settings {
|
|
type Error = String;
|
|
|
|
fn try_from(v: UrlEncodedDomainSettings) -> Result<Self, Self::Error> {
|
|
let origin_descr = match v.domain_setting_origin_descr_kind.as_str() {
|
|
"git" => Ok(origin::Descr::Git {
|
|
url: v
|
|
.domain_setting_origin_descr_git_url
|
|
.ok_or("missing domain_setting_origin_descr_git_url")?,
|
|
branch_name: v
|
|
.domain_setting_origin_descr_git_branch_name
|
|
.ok_or("missing domain_setting_origin_descr_git_branch_name")?,
|
|
}),
|
|
"" => Err("missing domain_setting_origin_descr_kind".to_string()),
|
|
_ => Err("invalid domain_setting_origin_descr_kind".to_string()),
|
|
}?;
|
|
|
|
Ok(Self {
|
|
origin_descr,
|
|
add_path_prefix: v.domain_setting_add_path_prefix,
|
|
})
|
|
}
|
|
}
|
|
|
|
impl TryFrom<domain::Settings> for UrlEncodedDomainSettings {
|
|
type Error = unexpected::Error;
|
|
|
|
fn try_from(v: domain::Settings) -> Result<Self, Self::Error> {
|
|
let mut res = UrlEncodedDomainSettings::default();
|
|
|
|
match v.origin_descr {
|
|
origin::Descr::Git { url, branch_name } => {
|
|
res.domain_setting_origin_descr_kind = "git".to_string();
|
|
res.domain_setting_origin_descr_git_url = Some(url);
|
|
res.domain_setting_origin_descr_git_branch_name = Some(branch_name);
|
|
}
|
|
}
|
|
|
|
res.domain_setting_add_path_prefix = v.add_path_prefix;
|
|
|
|
Ok(res)
|
|
}
|
|
}
|
|
|