winget_types/shared/url/
mod.rs

1mod copyright_url;
2mod license_url;
3mod package_url;
4mod publisher_support_url;
5mod publisher_url;
6mod release_notes_url;
7
8use std::str::FromStr;
9
10pub use copyright_url::CopyrightUrl;
11use derive_more::{Deref, DerefMut, Display};
12pub use license_url::LicenseUrl;
13pub use package_url::PackageUrl;
14use percent_encoding::percent_decode_str;
15pub use publisher_support_url::PublisherSupportUrl;
16pub use publisher_url::PublisherUrl;
17pub use release_notes_url::ReleaseNotesUrl;
18use serde::{Deserialize, Serialize};
19use url::{ParseError, Url};
20
21#[derive(
22    Clone,
23    Debug,
24    Display,
25    Deref,
26    DerefMut,
27    Hash,
28    Eq,
29    PartialEq,
30    PartialOrd,
31    Ord,
32    Serialize,
33    Deserialize,
34)]
35pub struct DecodedUrl(Url);
36
37impl FromStr for DecodedUrl {
38    type Err = ParseError;
39
40    fn from_str(s: &str) -> Result<Self, Self::Err> {
41        Url::parse(&percent_decode_str(s).decode_utf8_lossy()).map(DecodedUrl)
42    }
43}
44
45impl Default for DecodedUrl {
46    fn default() -> Self {
47        Self(Url::parse("https://example.com").unwrap())
48    }
49}