Skip to main content

IngestConfig

Struct IngestConfig 

Source
pub struct IngestConfig<'a> {
    pub paths: &'a PathPolicy,
    pub prose: bool,
    pub pdf: bool,
    pub ocr: bool,
    pub vision: bool,
    pub audio: bool,
}
Expand description

What roteiro sync ingests: which paths it reads (ADR-0007 [paths]), and which content classes it extracts within them (ADR-0007 [ingest]).

Every toggle defaults to on, and a toggle only gates content within a build that supports it — turning pdf on cannot extract PDF text in a binary built without the pdf-text feature, but turning it off suppresses that content in a binary that has it.

§Why the path policy travels here

Self::paths answers a different question from the toggles — which files rather than how much of a file — and it is carried in the same value deliberately. This struct already reaches every entry point that reads repository bytes, and crate::paths is a rule that is only correct if every such reader consults it: an exclusion honoured by extraction and not by the authored classifier leaves a committed markdown file under an excluded path still able to be parsed as one of our ADRs (issue #817). A reader that has the ingestion configuration therefore cannot fail to have the path policy too, and adding a reader does not mean remembering to thread a second parameter to it.

It is a borrow rather than an owned list so this stays Copy, which is what lets it keep travelling by value through the call graph it already travels through. PathPolicy::empty is 'static, so default() needs no caller-supplied storage.

The five toggles split into two groups, and the split is the ADR-0015 boundary:

  • prose, pdf and ocr gate extraction: what is decoded from the bytes into meta.content as a derived fact. They contribute to the extraction cache key, because turning one off changes what extraction produces.
  • vision and audio gate generation: whether roteiro media build may invoke a model at all. They no longer touch extraction, so they contribute nothing to the cache key — a repository that sets audio = false gets exactly the derived facts it would get with it on.

Fields§

§paths: &'a PathPolicy

Which repository paths are read at all, and how much of each is mined — ADR-0007 [paths]. Empty by default, which is exactly today’s behaviour.

§prose: bool

Embed the UTF-8 body of prose files (Markdown, plain text).

§pdf: bool

Extract text from PDF documents (needs the pdf-text feature).

§ocr: bool

OCR literal text from images (needs the image-ocr feature).

§vision: bool

Allow roteiro media build to describe images with a vision model (needs the image-vision feature). Since ADR-0015 this gates generation, not extraction: a description is never written to meta.content.

§audio: bool

Allow roteiro media build to transcribe spoken-word audio (needs the audio-transcribe feature). Gates generation, as vision does.

Implementations§

Source§

impl IngestConfig<'_>

Source

pub fn with_paths<'b>(self, paths: &'b PathPolicy) -> IngestConfig<'b>

The same content toggles over a different path policy.

Exists for the one shape a borrowed policy makes awkward: a 'static callback (the sync-on-access hook a serve workspace installs) cannot capture a value borrowing from main’s stack, so it owns a clone of the policy and rebinds the toggles onto it per call. Rebinding rather than reconstructing field-by-field keeps the toggles in one place, so a sixth toggle does not have to be remembered here.

§The result’s lifetime is the argument’s, not the receiver’s

'b is independent of 'a deliberately, and tying them together is a compile error one feature flag away. The caller this exists for holds a short-lived IngestConfig and needs a 'static one to move into a callback: ingest.with_paths(PathPolicy::empty()) must yield IngestConfig<'static>, which it can only do if the result follows the 'static argument rather than the borrowed receiver. Unified, the result takes the receiver’s shorter lifetime, the callback stops being 'static, and roteiro serve no longer builds — which is exactly what happened (PR #850: green on the default feature set, red on MSRV and on --no-default-features --features mcp, where this code is compiled).

Source

pub fn class(&self, path: &str) -> PathClass

How path is read — the shared answer both this crate’s extraction and rto_spec’s authored classifier act on. See crate::paths.

Source

pub fn generates(self, kind: MediaKind) -> bool

Whether this configuration permits roteiro media build to run kind. An operator can disable generation outright without touching the graph.

Trait Implementations§

Source§

impl<'a> Clone for IngestConfig<'a>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for IngestConfig<'a>

Source§

impl<'a> Debug for IngestConfig<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for IngestConfig<'_>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'a> Eq for IngestConfig<'a>

Source§

impl<'a> PartialEq for IngestConfig<'a>

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<'a> StructuralPartialEq for IngestConfig<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for IngestConfig<'a>

§

impl<'a> RefUnwindSafe for IngestConfig<'a>

§

impl<'a> Send for IngestConfig<'a>

§

impl<'a> Sync for IngestConfig<'a>

§

impl<'a> Unpin for IngestConfig<'a>

§

impl<'a> UnsafeUnpin for IngestConfig<'a>

§

impl<'a> UnwindSafe for IngestConfig<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.