pub struct Manifest {
pub version: u32,
pub generated_at: String,
pub default_cache: CachePolicy,
pub entries: BTreeMap<String, ManifestEntry>,
}Expand description
Complete ISR build manifest — emitted as dist/.ssg/manifest.json.
§Examples
use ssg_core::{build_entry, Manifest};
let mut m = Manifest::new("build-1");
m.insert("/a.html", build_entry(vec!["a.md".into()], &[b"a"], None));
assert_eq!(m.len(), 1);
assert!(m.get("/a.html").is_some());Fields§
§version: u32Schema version (currently always MANIFEST_VERSION).
generated_at: StringIdentifier for the build that produced this manifest. Adapters use this to detect a stale KV namespace after a deploy.
default_cache: CachePolicySite-wide cache policy applied when an entry lacks its own
cache field.
entries: BTreeMap<String, ManifestEntry>URL → entry map. Iteration order is lexicographic.
Implementations§
Source§impl Manifest
impl Manifest
Sourcepub fn new(build_id: impl Into<String>) -> Self
pub fn new(build_id: impl Into<String>) -> Self
Constructs an empty manifest stamped with build_id.
§Examples
use ssg_core::{Manifest, MANIFEST_VERSION};
let m = Manifest::new("build-42");
assert_eq!(m.version, MANIFEST_VERSION);
assert_eq!(m.generated_at, "build-42");
assert!(m.is_empty());Sourcepub fn insert(&mut self, url: impl Into<String>, entry: ManifestEntry)
pub fn insert(&mut self, url: impl Into<String>, entry: ManifestEntry)
Inserts (or replaces) an entry.
§Examples
use ssg_core::{build_entry, Manifest};
let mut m = Manifest::new("b");
m.insert("/a.html", build_entry(vec!["a.md".into()], &[b"a"], None));
assert_eq!(m.len(), 1);Sourcepub fn get(&self, url: &str) -> Option<&ManifestEntry>
pub fn get(&self, url: &str) -> Option<&ManifestEntry>
Returns the entry for url, if any.
§Examples
use ssg_core::{build_entry, Manifest};
let mut m = Manifest::new("b");
m.insert("/a.html", build_entry(vec!["a.md".into()], &[b"a"], None));
assert!(m.get("/a.html").is_some());
assert!(m.get("/missing").is_none());Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of entries.
§Examples
use ssg_core::{build_entry, Manifest};
let mut m = Manifest::new("b");
assert_eq!(m.len(), 0);
m.insert("/a.html", build_entry(vec!["a.md".into()], &[b"a"], None));
assert_eq!(m.len(), 1);Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Reports whether the manifest holds no entries.
§Examples
use ssg_core::{build_entry, Manifest};
let mut m = Manifest::new("b");
assert!(m.is_empty());
m.insert("/a.html", build_entry(vec!["a.md".into()], &[b"a"], None));
assert!(!m.is_empty());Sourcepub fn to_pretty_json(&self) -> Result<String>
pub fn to_pretty_json(&self) -> Result<String>
Serialises to canonical pretty JSON (stable key order, 2-space
indent). Suitable for direct write to dist/.ssg/manifest.json.
§Errors
Returns the underlying serde_json::Error if any entry is not
representable (in practice this is unreachable — every field
is a primitive or a String).
§Examples
use ssg_core::Manifest;
let m = Manifest::new("build-1");
let json = m.to_pretty_json().unwrap();
assert!(json.contains("\"version\""));
assert!(json.contains("\"generated_at\": \"build-1\""));Sourcepub fn urls_for_source(&self, source_key: &str) -> Vec<String>
pub fn urls_for_source(&self, source_key: &str) -> Vec<String>
Returns every URL that depends on the given source key.
Used by the invalidation webhook (AC8): given
content/posts/foo.md, find every URL whose manifest entry
lists it as a source — typically the post itself plus any
tag/archive index that includes it.
§Examples
use ssg_core::{build_entry, Manifest};
let mut m = Manifest::new("b");
m.insert(
"/a.html",
build_entry(vec!["c/a.md".into()], &[b"A"], None),
);
m.insert(
"/b.html",
build_entry(vec!["c/b.md".into()], &[b"B"], None),
);
let deps = m.urls_for_source("c/a.md");
assert_eq!(deps, vec!["/a.html"]);Trait Implementations§
Source§impl<'de> Deserialize<'de> for Manifest
impl<'de> Deserialize<'de> for Manifest
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for Manifest
impl StructuralPartialEq for Manifest
Auto Trait Implementations§
impl Freeze for Manifest
impl RefUnwindSafe for Manifest
impl Send for Manifest
impl Sync for Manifest
impl Unpin for Manifest
impl UnsafeUnpin for Manifest
impl UnwindSafe for Manifest
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.