diff options
author | aviac <aviac@mailbox.org> | 2024-05-10 09:00:27 +0200 |
---|---|---|
committer | aviac <aviac@mailbox.org> | 2024-05-10 09:00:27 +0200 |
commit | 9b2864bd70e7bff52f4f0bbdfbe0e2164d286063 (patch) | |
tree | 176585b682dc16197db7cf90dde276aca205ed1e /src/lib.rs | |
parent | Merge pull request 'bump version to 0.2.0' (#52) from bump-0.2.0 into main (diff) | |
download | forgejo-api-9b2864bd70e7bff52f4f0bbdfbe0e2164d286063.tar.xz forgejo-api-9b2864bd70e7bff52f4f0bbdfbe0e2164d286063.zip |
feat: naive implementation of ssh_url deserialization
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -1,4 +1,5 @@ use reqwest::{Client, Request, StatusCode}; +use serde::{Deserialize, Deserializer}; use soft_assert::*; use url::Url; use zeroize::Zeroize; @@ -254,6 +255,31 @@ fn none_if_blank_url<'de, D: serde::Deserializer<'de>>( deserializer.deserialize_str(EmptyUrlVisitor) } +#[allow(dead_code)] // not used yet, but it might appear in the future +fn deserialize_ssh_url<'de, D, DE>(deserializer: D) -> Result<Url, DE> +where + D: Deserializer<'de>, + DE: serde::de::Error, +{ + let raw_url: String = String::deserialize(deserializer).map_err(DE::custom)?; + let url = format!("ssh://{url}", url = raw_url.replace(":", "/")); + Url::parse(url.as_str()).map_err(DE::custom) +} + +fn deserialize_optional_ssh_url<'de, D, DE>(deserializer: D) -> Result<Option<Url>, DE> +where + D: Deserializer<'de>, + DE: serde::de::Error, +{ + let raw_url: Option<String> = Option::deserialize(deserializer).map_err(DE::custom)?; + raw_url + .map(|raw_url| { + let url = format!("ssh://{url}", url = raw_url.replace(":", "/")); + Url::parse(url.as_str()).map_err(DE::custom).map(Some) + }) + .unwrap_or(Ok(None)) +} + impl From<structs::DefaultMergeStyle> for structs::MergePullRequestOptionDo { fn from(value: structs::DefaultMergeStyle) -> Self { match value { |