pub struct BibliographyDependency {
path: ProjectPath,
content: ContentHash,
}Expand description
A bibliography input paired with its content-hash boundary.
DependencyId::Bibliography answers which .bib file this is (its
canonical ProjectPath); the paired [ContentHash] answers what was in
it at build time. Together they are what a future incremental engine needs
to decide that cached citation data is stale: the id is the cache slot, the
content hash is the staleness check (design note §4.1, §7).
Construction guarantees the id is always the Bibliography variant, so a
BibliographyDependency cannot be built over a source/asset/label identity
by mistake: path and kind are therefore infallible.
The content hash is supplied by the caller rather than computed here, which
keeps mos-cache free of any bibliography-format knowledge. Produce it from
the source bytes with mos_bib::bibliography_content_hash; mos-eval (which
reads the .bib and already depends on both crates) is the natural wiring
point.
§Examples
use mos_cache::{BibliographyDependency, DependencyId, DependencyKind};
use mos_core::ContentHash;
// The content hash would come from `mos_bib::bibliography_content_hash`.
let dep = BibliographyDependency::new("./refs.bib", ContentHash(0x1234))?;
assert_eq!(dep.kind(), DependencyKind::Bibliography);
assert_eq!(dep.id(), DependencyId::bibliography("refs.bib")?);
assert_eq!(dep.path().as_str(), "refs.bib");
assert_eq!(dep.content(), ContentHash(0x1234));Fields§
§path: ProjectPath§content: ContentHashImplementations§
Source§impl BibliographyDependency
impl BibliographyDependency
Sourcepub fn new(
path: impl AsRef<str>,
content: ContentHash,
) -> Result<Self, ProjectPathError>
pub fn new( path: impl AsRef<str>, content: ContentHash, ) -> Result<Self, ProjectPathError>
Pair a bibliography source path with the content hash of its bytes.
The path is canonicalized into a ProjectPath (§3.1), so logically
equal paths yield equal dependencies; an invalid path returns
ProjectPathError.
§Examples
use mos_cache::BibliographyDependency;
use mos_core::ContentHash;
// `./ch/../refs.bib` and `refs.bib` canonicalize to one identity.
assert_eq!(
BibliographyDependency::new("./ch/../refs.bib", ContentHash(7)),
BibliographyDependency::new("refs.bib", ContentHash(7)),
);Sourcepub fn id(&self) -> DependencyId
pub fn id(&self) -> DependencyId
The typed dependency identity (always the Bibliography variant).
§Examples
use mos_cache::{BibliographyDependency, DependencyId};
use mos_core::ContentHash;
let dep = BibliographyDependency::new("refs.bib", ContentHash(1))?;
assert_eq!(dep.id(), DependencyId::bibliography("refs.bib")?);Sourcepub const fn path(&self) -> &ProjectPath
pub const fn path(&self) -> &ProjectPath
The canonical project path of the bibliography source.
§Examples
use mos_cache::BibliographyDependency;
use mos_core::ContentHash;
assert_eq!(
BibliographyDependency::new("refs.bib", ContentHash(1))?.path().as_str(),
"refs.bib",
);Sourcepub const fn content(&self) -> ContentHash
pub const fn content(&self) -> ContentHash
The content-hash boundary of the source bytes at build time.
§Examples
use mos_cache::BibliographyDependency;
use mos_core::ContentHash;
assert_eq!(
BibliographyDependency::new("refs.bib", ContentHash(42))?.content(),
ContentHash(42),
);Sourcepub const fn kind(&self) -> DependencyKind
pub const fn kind(&self) -> DependencyKind
The DependencyKind of this dependency: always
Bibliography.
§Examples
use mos_cache::{BibliographyDependency, DependencyKind};
use mos_core::ContentHash;
let dep = BibliographyDependency::new("refs.bib", ContentHash(1))?;
assert_eq!(dep.kind(), DependencyKind::Bibliography);Trait Implementations§
Source§impl Clone for BibliographyDependency
impl Clone for BibliographyDependency
Source§fn clone(&self) -> BibliographyDependency
fn clone(&self) -> BibliographyDependency
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more