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
use crate::BlankId;
use std::fmt;

/// Warning that can occur during JSON-LD documents processing.
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum Warning {
	/// Some node has an empty term.
	///
	/// The use of empty terms is not allowed as not all
	/// programming languages are able to handle empty JSON keys.
	EmptyTerm,

	/// Blank node identifier is used as property.
	///
	/// The use of blank node identifiers to label properties is obsolete,
	/// and may be removed in a future version of JSON-LD.
	BlankNodeIdProperty(BlankId),

	/// Term as the form of a keyword.
	KeywordLikeTerm(String),

	/// Value as the form of a keyword.
	KeywordLikeValue(String),

	/// Language tag is not well-formed.
	MalformedLanguageTag(String, langtag::Error),

	/// String literal is not an IRI.
	MalformedIri(String),
}

impl fmt::Display for Warning {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		match self {
			Self::EmptyTerm => write!(f, "empty term"),
			Self::BlankNodeIdProperty(id) => {
				write!(f, "blank node identifier `{}` is used as property", id)
			}
			Self::KeywordLikeTerm(term) => write!(f, "term `{}` has the form of a keyword", term),
			Self::KeywordLikeValue(value) => {
				write!(f, "value `{}` has the form of a keyword", value)
			}
			Self::MalformedLanguageTag(tag, e) => {
				write!(f, "malformed language tag `{}`: {}", tag, e)
			}
			Self::MalformedIri(value) => write!(f, "invalid IRI `{}`", value),
		}
	}
}