ssi_dids_core/did/url/
reference.rs1use std::borrow::Cow;
2
3use serde::{Deserialize, Serialize};
4
5use crate::DID;
6
7use super::{relative::RelativeDIDURLBuf, DIDURLBuf, RelativeDIDURL, DIDURL};
8
9pub enum DIDURLReference<'a> {
10 Absolute(&'a DIDURL),
11 Relative(&'a RelativeDIDURL),
12}
13
14impl DIDURLReference<'_> {
15 pub fn resolve(&self, base_id: &DID) -> Cow<DIDURL> {
16 match self {
17 Self::Absolute(a) => Cow::Borrowed(a),
18 Self::Relative(r) => Cow::Owned(r.resolve(base_id)),
19 }
20 }
21}
22
23#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
24#[serde(untagged)]
25pub enum DIDURLReferenceBuf {
26 Absolute(DIDURLBuf),
27 Relative(RelativeDIDURLBuf),
28}
29
30impl DIDURLReferenceBuf {
31 pub fn as_did_reference(&self) -> DIDURLReference {
32 match self {
33 Self::Absolute(a) => DIDURLReference::Absolute(a),
34 Self::Relative(r) => DIDURLReference::Relative(r),
35 }
36 }
37
38 pub fn resolve(&self, base_id: &DID) -> Cow<DIDURL> {
39 match self {
40 Self::Absolute(a) => Cow::Borrowed(a.as_did_url()),
41 Self::Relative(r) => Cow::Owned(r.resolve(base_id)),
42 }
43 }
44}
45
46impl From<DIDURLBuf> for DIDURLReferenceBuf {
47 fn from(value: DIDURLBuf) -> Self {
48 Self::Absolute(value)
49 }
50}
51
52impl From<RelativeDIDURLBuf> for DIDURLReferenceBuf {
53 fn from(value: RelativeDIDURLBuf) -> Self {
54 Self::Relative(value)
55 }
56}