1use crate::overlay::MetaOverlay;
4use crate::schema::ToJsonLd;
5use crate::{resolve_meta, ResolvedMeta};
6use sova_core::Request;
7use serde_json::Value;
8
9pub trait MetaExt {
10 fn meta(&mut self) -> &MetaOverlay;
11 fn resolved_meta(&self) -> ResolvedMeta;
12}
13
14impl MetaExt for Request {
15 fn meta(&mut self) -> &MetaOverlay {
16 if self.get::<MetaOverlay>().is_none() {
17 self.set(MetaOverlay::default());
18 }
19 self.get::<MetaOverlay>().expect("MetaOverlay just set")
20 }
21
22 fn resolved_meta(&self) -> ResolvedMeta {
23 resolve_meta(self)
24 }
25}
26
27impl MetaOverlay {
28 pub fn jsonld_schema<T: ToJsonLd>(&self, schema: &T) -> &Self {
29 self.jsonld(schema.json_ld())
30 }
31
32 pub fn jsonld_raw(&self, value: Value) -> &Self {
33 self.jsonld(value)
34 }
35}