1use std::sync::Arc;
2
3use into_owned_trait::IntoOwned;
4use json_syntax::tracing::{JsonBacktrace, JsonBacktraceBuf, JsonBacktraceBuilder, JsonLocated};
5use rdf_syntax::{Iri, IriBuf};
6
7use crate::{JsonLdExpandedDocument, JsonLdFlattenedDocument};
8
9pub type JsonLdBacktraceBuilder<'a> = JsonBacktraceBuilder<'a, JsonLdSourceFileRef<'a>>;
14
15pub type JsonLdBacktrace = JsonBacktrace<JsonLdSourceFile>;
16
17pub type JsonLdBacktraceBuf = JsonBacktraceBuf<JsonLdSourceFile>;
18
19pub type JsonLdLocated<T> = JsonLocated<T, JsonLdSourceFile>;
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
31pub struct JsonLdSourceFileRef<'a> {
32 pub iri: Option<&'a Iri>,
34
35 pub form: JsonLdDocumentFormRef<'a>,
37}
38
39impl<'a> JsonLdSourceFileRef<'a> {
40 pub fn original(iri: Option<&'a Iri>) -> Self {
43 Self {
44 iri,
45 form: JsonLdDocumentFormRef::Original,
46 }
47 }
48
49 pub fn expanded(iri: Option<&'a Iri>, document: &'a Arc<JsonLdExpandedDocument>) -> Self {
51 Self {
52 iri,
53 form: JsonLdDocumentFormRef::Expanded(document),
54 }
55 }
56
57 pub fn flattened(iri: Option<&'a Iri>, document: &'a Arc<JsonLdFlattenedDocument>) -> Self {
59 Self {
60 iri,
61 form: JsonLdDocumentFormRef::Flattened(document),
62 }
63 }
64}
65
66impl IntoOwned for JsonLdSourceFileRef<'_> {
67 type Owned = JsonLdSourceFile;
68
69 fn into_owned(self) -> JsonLdSourceFile {
70 JsonLdSourceFile {
71 iri: self.iri.map(Iri::to_owned),
72 form: self.form.into_owned(),
73 }
74 }
75}
76
77#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
79pub enum JsonLdDocumentFormRef<'a> {
80 Original,
82
83 Expanded(&'a Arc<JsonLdExpandedDocument>),
85
86 Flattened(&'a Arc<JsonLdFlattenedDocument>),
88}
89
90impl IntoOwned for JsonLdDocumentFormRef<'_> {
91 type Owned = JsonLdDocumentForm;
92
93 fn into_owned(self) -> JsonLdDocumentForm {
94 match self {
95 Self::Original => JsonLdDocumentForm::Original,
96 Self::Expanded(document) => JsonLdDocumentForm::Expanded(document.clone()),
97 Self::Flattened(document) => JsonLdDocumentForm::Flattened(document.clone()),
98 }
99 }
100}
101
102#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
112pub struct JsonLdSourceFile {
113 pub iri: Option<IriBuf>,
115
116 pub form: JsonLdDocumentForm,
118}
119
120impl JsonLdSourceFile {
121 pub fn original(iri: Option<IriBuf>) -> Self {
124 Self {
125 iri,
126 form: JsonLdDocumentForm::Original,
127 }
128 }
129
130 pub fn expanded(iri: Option<IriBuf>, document: Arc<JsonLdExpandedDocument>) -> Self {
132 Self {
133 iri,
134 form: JsonLdDocumentForm::Expanded(document),
135 }
136 }
137
138 pub fn flattened(iri: Option<IriBuf>, document: Arc<JsonLdFlattenedDocument>) -> Self {
140 Self {
141 iri,
142 form: JsonLdDocumentForm::Flattened(document),
143 }
144 }
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
149pub enum JsonLdDocumentForm {
150 Original,
153
154 Expanded(Arc<JsonLdExpandedDocument>),
157
158 Flattened(Arc<JsonLdFlattenedDocument>),
161}