1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Builder, Serialize, Deserialize, PartialEq, Eq, Hash)]
5pub struct Url {
6 pub url: String,
7 #[serde(
8 rename = "url-type",
9 skip_serializing_if = "equals_default_url_type",
10 default = "default_url_type"
11 )]
12 pub url_type: String,
13}
14
15impl Url {
16 pub fn new_git<Stringy: Into<String>>(url: Stringy) -> Self {
17 Self {
18 url: url.into(),
19 url_type: default_url_type(),
20 }
21 }
22
23 #[must_use]
24 pub fn digest(&self) -> crate::Digest {
25 let digest = crev_common::blake2b256sum(self.url.to_ascii_lowercase().as_bytes());
26 digest.into()
27 }
28}
29
30pub(crate) fn equals_default_url_type(s: &str) -> bool {
31 s == default_url_type()
32}
33
34pub(crate) fn default_url_type() -> String {
35 "git".into()
36}