Remove serialize traits from verbatim URL (#5501)

This commit is contained in:
Charlie Marsh 2024-07-26 20:51:24 -04:00 committed by GitHub
parent 4f3dde34dc
commit 8f16f1b746
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 2 additions and 38 deletions

View file

@ -197,7 +197,7 @@ impl<T: Pep508Url + Display> Display for Requirement<T> {
}
/// <https://github.com/serde-rs/serde/issues/908#issuecomment-298027413>
impl<'de, T: Pep508Url + Deserialize<'de>> Deserialize<'de> for Requirement<T> {
impl<'de, T: Pep508Url> Deserialize<'de> for Requirement<T> {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,

View file

@ -13,14 +13,10 @@ use uv_fs::{normalize_absolute_path, normalize_url_path};
use crate::Pep508Url;
/// A wrapper around [`Url`] that preserves the original string.
#[derive(Debug, Clone, Eq, derivative::Derivative, serde::Deserialize, serde::Serialize)]
#[derive(Debug, Clone, Eq, derivative::Derivative)]
#[derivative(PartialEq, Hash, Ord)]
pub struct VerbatimUrl {
/// The parsed URL.
#[serde(
serialize_with = "Url::serialize_internal",
deserialize_with = "Url::deserialize_internal"
)]
url: Url,
/// The URL as it was provided by the user.
#[derivative(PartialEq = "ignore")]

View file

@ -1,6 +1,5 @@
use std::fmt::{Display, Formatter};
use std::path::{Path, PathBuf};
use thiserror::Error;
use url::{ParseError, Url};
@ -138,37 +137,6 @@ impl Display for VerbatimParsedUrl {
}
}
impl TryFrom<VerbatimUrl> for VerbatimParsedUrl {
type Error = ParsedUrlError;
fn try_from(verbatim_url: VerbatimUrl) -> Result<Self, Self::Error> {
let parsed_url = ParsedUrl::try_from(verbatim_url.to_url())?;
Ok(Self {
parsed_url,
verbatim: verbatim_url,
})
}
}
impl serde::ser::Serialize for VerbatimParsedUrl {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
self.verbatim.serialize(serializer)
}
}
impl<'de> serde::de::Deserialize<'de> for VerbatimParsedUrl {
fn deserialize<D>(deserializer: D) -> Result<VerbatimParsedUrl, D::Error>
where
D: serde::de::Deserializer<'de>,
{
let verbatim_url = VerbatimUrl::deserialize(deserializer)?;
Self::try_from(verbatim_url).map_err(serde::de::Error::custom)
}
}
/// We support three types of URLs for distributions:
/// * The path to a file or directory (`file://`)
/// * A Git repository (`git+https://` or `git+ssh://`), optionally with a subdirectory and/or