1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use core::fmt::Debug;
use core::fmt::Formatter;
use core::fmt::Result;
use serde;
use serde::Deserialize;
use serde::Serialize;
use crate::common::Object;
use crate::common::Url;
#[derive(Clone, PartialEq, Deserialize, Serialize)]
#[serde(untagged)]
pub enum Context {
Url(Url),
Obj(Object),
}
impl Debug for Context {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
match self {
Self::Url(inner) => Debug::fmt(inner, f),
Self::Obj(inner) => Debug::fmt(inner, f),
}
}
}
impl From<Url> for Context {
fn from(other: Url) -> Self {
Self::Url(other)
}
}
impl From<Object> for Context {
fn from(other: Object) -> Self {
Self::Obj(other)
}
}
impl<T> PartialEq<T> for Context
where
T: AsRef<str> + ?Sized,
{
fn eq(&self, other: &T) -> bool {
match self {
Self::Url(inner) => inner.as_str() == other.as_ref(),
Self::Obj(_) => false,
}
}
}