mirror of
https://seed.radicle.dev/rad:z6cFWeWpnZNHh9rUW8phgA3b5yGt.git
synced 2026-10-25 14:20:31 +08:00
Port over all git relevant parts of the radicle-link repository[0]. The packages that are kept are: * git-ext * git-ref-format * git-trailers * link-git * macros * std-ext * test -- only the portions that test the above The development and testing scripts are also added for local and CI testing. [0]: https://github.com/radicle-dev/radicle-link/ Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com>
145 lines
3.5 KiB
Rust
145 lines
3.5 KiB
Rust
// Copyright © 2021 The Radicle Link Contributors
|
|
//
|
|
// This file is part of radicle-link, distributed under the GPLv3 with Radicle
|
|
// Linking Exception. For full terms see the included LICENSE file.
|
|
|
|
use std::convert::TryFrom;
|
|
|
|
use ::serde::{de, Deserialize, Deserializer, Serialize, Serializer};
|
|
|
|
use crate::{
|
|
refspec::{PatternStr, PatternString},
|
|
Namespaced,
|
|
Qualified,
|
|
RefStr,
|
|
RefString,
|
|
};
|
|
|
|
impl<'de: 'a, 'a> Deserialize<'de> for &'a RefStr {
|
|
#[inline]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
Deserialize::deserialize(deserializer)
|
|
.and_then(|s: &str| Self::try_from(s).map_err(de::Error::custom))
|
|
}
|
|
}
|
|
|
|
impl<'a> Serialize for &'a RefStr {
|
|
#[inline]
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.as_str())
|
|
}
|
|
}
|
|
|
|
impl<'de> Deserialize<'de> for RefString {
|
|
#[inline]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
Deserialize::deserialize(deserializer).map(|x: &RefStr| x.to_owned())
|
|
}
|
|
}
|
|
|
|
impl Serialize for RefString {
|
|
#[inline]
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.as_str())
|
|
}
|
|
}
|
|
|
|
impl<'de: 'a, 'a> Deserialize<'de> for &'a PatternStr {
|
|
#[inline]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
Deserialize::deserialize(deserializer)
|
|
.and_then(|s: &str| Self::try_from(s).map_err(de::Error::custom))
|
|
}
|
|
}
|
|
|
|
impl<'a> Serialize for &'a PatternStr {
|
|
#[inline]
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.as_str())
|
|
}
|
|
}
|
|
|
|
impl<'de> Deserialize<'de> for PatternString {
|
|
#[inline]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
Deserialize::deserialize(deserializer).map(|x: &PatternStr| x.to_owned())
|
|
}
|
|
}
|
|
|
|
impl Serialize for PatternString {
|
|
#[inline]
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.as_str())
|
|
}
|
|
}
|
|
|
|
impl<'de: 'a, 'a> Deserialize<'de> for Qualified<'a> {
|
|
#[inline]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
Deserialize::deserialize(deserializer).and_then(|s: &RefStr| {
|
|
s.qualified()
|
|
.ok_or_else(|| de::Error::custom("not a qualified ref"))
|
|
})
|
|
}
|
|
}
|
|
|
|
impl Serialize for Qualified<'_> {
|
|
#[inline]
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.as_str())
|
|
}
|
|
}
|
|
|
|
impl<'de: 'a, 'a> Deserialize<'de> for Namespaced<'a> {
|
|
#[inline]
|
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
|
where
|
|
D: Deserializer<'de>,
|
|
{
|
|
Deserialize::deserialize(deserializer).and_then(|s: &RefStr| {
|
|
s.namespaced()
|
|
.ok_or_else(|| de::Error::custom("not a namespaced ref"))
|
|
})
|
|
}
|
|
}
|
|
|
|
impl Serialize for Namespaced<'_> {
|
|
#[inline]
|
|
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
|
where
|
|
S: Serializer,
|
|
{
|
|
serializer.serialize_str(self.as_str())
|
|
}
|
|
}
|