sova-meta 0.1.2

Document meta, OG/Twitter, JSON-LD, sitemap and robots for Sova
Documentation
//! `req.meta()` extension.

use crate::overlay::MetaOverlay;
use crate::schema::ToJsonLd;
use crate::{resolve_meta, ResolvedMeta};
use sova_core::Request;
use serde_json::Value;

pub trait MetaExt {
    fn meta(&mut self) -> &MetaOverlay;
    fn resolved_meta(&self) -> ResolvedMeta;
}

impl MetaExt for Request {
    fn meta(&mut self) -> &MetaOverlay {
        if self.get::<MetaOverlay>().is_none() {
            self.set(MetaOverlay::default());
        }
        self.get::<MetaOverlay>().expect("MetaOverlay just set")
    }

    fn resolved_meta(&self) -> ResolvedMeta {
        resolve_meta(self)
    }
}

impl MetaOverlay {
    pub fn jsonld_schema<T: ToJsonLd>(&self, schema: &T) -> &Self {
        self.jsonld(schema.json_ld())
    }

    pub fn jsonld_raw(&self, value: Value) -> &Self {
        self.jsonld(value)
    }
}