winget_types/shared/url/
mod.rs1mod 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}