pub struct ContentSourceEntry {
pub source_type: String,
pub path: Option<String>,
pub folder_id: Option<String>,
pub service_account_key: Option<String>,
pub connection_id: Option<i64>,
pub watch: bool,
pub enabled: Option<bool>,
pub change_detection: String,
pub file_patterns: Vec<String>,
pub loop_back_enabled: bool,
pub analytics_sync_enabled: bool,
pub poll_interval_seconds: Option<u64>,
}Expand description
A single content source entry.
Fields§
§source_type: StringSource type: "local_fs" or "google_drive".
path: Option<String>Filesystem path (for local_fs sources). Supports ~ expansion.
folder_id: Option<String>Google Drive folder ID (for google_drive sources).
service_account_key: Option<String>Path to a Google service-account JSON key file (for google_drive sources).
Legacy field – new installs use connection_id with OAuth 2.0 instead.
connection_id: Option<i64>Reference to a row in the connections table for remote sources.
When set, the Watchtower uses the linked account’s credentials
instead of service_account_key.
watch: boolWhether to watch for changes in real-time.
Deprecated: Use enabled and change_detection instead.
Kept for backward compatibility — when enabled is None, the
value of watch is used as the fallback.
enabled: Option<bool>Whether this source participates in ingestion at all.
When None, falls back to watch for backward compatibility.
When Some(false), the source is completely skipped.
change_detection: StringHow changes are detected for this source.
"auto"(default) — local_fs: notify watcher + fallback poll; google_drive: interval poll."poll"— poll only (useful when notify is unreliable, e.g. NFS)."none"— initial scan only, no ongoing monitoring.
file_patterns: Vec<String>File patterns to include.
loop_back_enabled: boolWhether to write metadata back to source files.
analytics_sync_enabled: boolWhether to sync analytics data (impressions, engagement, performance score) back into source file frontmatter on a periodic schedule.
Only supported for local_fs sources.
Default: false.
poll_interval_seconds: Option<u64>Polling interval in seconds for remote sources (default: 300 = 5 min).
Implementations§
Source§impl ContentSourceEntry
impl ContentSourceEntry
Sourcepub fn is_enabled(&self) -> bool
pub fn is_enabled(&self) -> bool
Whether this source should participate in ingestion.
Prefers enabled when explicitly set; otherwise falls back to
the legacy watch field for backward compatibility.
Sourcepub fn effective_change_detection(&self) -> &str
pub fn effective_change_detection(&self) -> &str
The effective change detection mode for this source.
Returns "none" when the source is disabled (short-circuit).
Sourcepub fn is_poll_only(&self) -> bool
pub fn is_poll_only(&self) -> bool
Whether this source uses poll-only change detection.
Sourcepub fn is_scan_only(&self) -> bool
pub fn is_scan_only(&self) -> bool
Whether this source should only do an initial scan with no ongoing monitoring.
Trait Implementations§
Source§impl Clone for ContentSourceEntry
impl Clone for ContentSourceEntry
Source§fn clone(&self) -> ContentSourceEntry
fn clone(&self) -> ContentSourceEntry
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ContentSourceEntry
impl Debug for ContentSourceEntry
Source§impl<'de> Deserialize<'de> for ContentSourceEntry
impl<'de> Deserialize<'de> for ContentSourceEntry
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>,
Auto Trait Implementations§
impl Freeze for ContentSourceEntry
impl RefUnwindSafe for ContentSourceEntry
impl Send for ContentSourceEntry
impl Sync for ContentSourceEntry
impl Unpin for ContentSourceEntry
impl UnsafeUnpin for ContentSourceEntry
impl UnwindSafe for ContentSourceEntry
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,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more