simplify domainpart
This commit is contained in:
parent
2b2306b57c
commit
9cdf4953fe
|
@ -1,53 +1,16 @@
|
||||||
use std::{
|
use std::str::FromStr;
|
||||||
net::{Ipv4Addr, Ipv6Addr},
|
|
||||||
str::FromStr,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
#[derive(PartialEq, Debug)]
|
||||||
struct JID {
|
struct JID {
|
||||||
// TODO: validate localpart (length, char]
|
// TODO: validate localpart (length, char]
|
||||||
localpart: Option<String>,
|
localpart: Option<String>,
|
||||||
domainpart: Domainpart,
|
domainpart: String,
|
||||||
resourcepart: Option<String>,
|
resourcepart: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Debug)]
|
|
||||||
enum Domainpart {
|
|
||||||
IPLiteral(Ipv6Addr),
|
|
||||||
IPv4Address(Ipv4Addr),
|
|
||||||
// TODO: domain name type, not string
|
|
||||||
IFQDN(String),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FromStr for Domainpart {
|
|
||||||
type Err = DomainpartParseError;
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
||||||
match s.parse::<Ipv6Addr>() {
|
|
||||||
Ok(ip) => Ok(Domainpart::IPLiteral(ip)),
|
|
||||||
Err(_) => match s.parse::<Ipv4Addr>() {
|
|
||||||
Ok(ip) => Ok(Domainpart::IPv4Address(ip)),
|
|
||||||
Err(_) => Ok(Domainpart::IFQDN(s.to_owned())),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TryFrom<String> for Domainpart {
|
|
||||||
type Error = DomainpartParseError;
|
|
||||||
|
|
||||||
fn try_from(value: String) -> Result<Self, Self::Error> {
|
|
||||||
value.parse()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
enum DomainpartParseError {}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
enum JIDParseError {
|
enum JIDParseError {
|
||||||
Empty,
|
Empty,
|
||||||
Domainpart(DomainpartParseError),
|
|
||||||
Malformed,
|
Malformed,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,10 +22,6 @@ impl JID {
|
||||||
resourcepart,
|
resourcepart,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn validate(&self) -> bool {
|
|
||||||
todo!()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for JID {
|
impl FromStr for JID {
|
||||||
|
@ -119,11 +78,7 @@ impl std::fmt::Display for JID {
|
||||||
f,
|
f,
|
||||||
"{}{}{}",
|
"{}{}{}",
|
||||||
self.localpart.clone().map(|l| l + "@").unwrap_or_default(),
|
self.localpart.clone().map(|l| l + "@").unwrap_or_default(),
|
||||||
match &self.domainpart {
|
self.domainpart,
|
||||||
Domainpart::IPLiteral(addr) => addr.to_string(),
|
|
||||||
Domainpart::IPv4Address(addr) => addr.to_string(),
|
|
||||||
Domainpart::IFQDN(domain) => domain.to_owned(),
|
|
||||||
},
|
|
||||||
self.resourcepart
|
self.resourcepart
|
||||||
.clone()
|
.clone()
|
||||||
.map(|r| "/".to_owned() + &r)
|
.map(|r| "/".to_owned() + &r)
|
||||||
|
|
Loading…
Reference in New Issue