Serde support for WheelFilename through str repr (#459)

I need this later, splitting out for PR size
This commit is contained in:
konsti 2023-11-19 20:43:14 +01:00 committed by GitHub
parent 3df3110800
commit 255edf4445
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 1 deletions

View file

@ -1,3 +1,4 @@
use serde::{de, Deserialize, Deserializer, Serialize, Serializer};
use std::fmt::{Display, Formatter};
use std::str::FromStr;
@ -8,7 +9,7 @@ use pep440_rs::Version;
use platform_tags::{TagPriority, Tags};
use puffin_normalize::{InvalidNameError, PackageName};
#[derive(Debug, Clone, Eq, PartialEq)]
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct WheelFilename {
pub name: PackageName,
pub version: Version,
@ -167,6 +168,25 @@ impl TryFrom<&Url> for WheelFilename {
}
}
impl<'de> Deserialize<'de> for WheelFilename {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
FromStr::from_str(&s).map_err(de::Error::custom)
}
}
impl Serialize for WheelFilename {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_str(&self.to_string())
}
}
#[derive(Error, Debug)]
pub enum WheelFilenameError {
#[error("The wheel filename \"{0}\" is invalid: {1}")]