Domani connects your domain to whatever you want to host on it, all with no account needed
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.
 
 
 
 
domani/src/service/http/util.rs

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)
}
}