Skip to main content

sova_meta/
ext.rs

1//! `req.meta()` extension.
2
3use 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}