use std::fmt::{self, Display};
use percent_encoding::{CONTROLS, percent_encode};
use crate::url::Url;
#[derive(Clone, Copy)]
pub struct Encode<'a>(pub Url<'a>);
impl Display for Encode<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
use crate::scheme::Encode as E;
let loc = percent_encode(self.0.loc().encoded_bytes(), CONTROLS);
match self.0 {
Url::Regular(_) => write!(f, "regular~://{loc}"),
Url::Search { domain, .. } => {
write!(f, "search~://{}{}/{loc}", E::domain(domain), E::ports((*self).into()))
}
Url::Archive { domain, .. } => {
write!(f, "archive~://{}{}/{loc}", E::domain(domain), E::ports((*self).into()))
}
Url::Sftp { domain, .. } => {
write!(f, "sftp~://{}{}/{loc}", E::domain(domain), E::ports((*self).into()))
}
}
}
}