Skip to main content

ComponentFactory

Struct ComponentFactory 

Source
pub struct ComponentFactory { /* private fields */ }
Expand description

Component factory for creating configured instances.

This factory provides a centralized way to create core components with proper configuration injection, ensuring consistent component initialization across the application.

§Examples

use subx_core::core::ComponentFactory;
use subx_core::config::ProductionConfigService;
use std::sync::Arc;

let config_service = Arc::new(ProductionConfigService::new()?);
let factory = ComponentFactory::new(config_service.as_ref())?;

// Create components with proper configuration
let match_engine = factory.create_match_engine()?;
let file_manager = factory.create_file_manager();
let ai_provider = factory.create_ai_provider()?;

Implementations§

Source§

impl ComponentFactory

Source

pub fn new(config_service: &dyn ConfigService) -> Result<Self>

Create a new component factory with the given configuration service.

§Arguments
  • config_service - Configuration service to load configuration from
§Errors

Returns an error if configuration loading fails.

Source

pub fn with_reporter(self, reporter: Arc<dyn Reporter>) -> Self

Attach a reporting sink, consuming and returning the factory.

The reporter is propagated into every component this factory builds, so one call at a command boundary wires an entire command.

§Arguments
  • reporter - Sink shared by every component created afterwards.
Source

pub fn reporter(&self) -> Arc<dyn Reporter>

Clone the factory’s reporting sink for attachment to a component.

Public so callers that construct a component outside the factory’s control (e.g. a MatchEngine around an externally supplied AI client) can still wire the command’s single reporter — the CLI’s match command does exactly this while adopting ComponentFactory::match_config.

Source

pub fn match_config(&self) -> MatchConfig

Return the MatchConfig this factory’s loaded Config implies.

The returned value carries the four configuration-derived fields read from the loaded config (max_sample_length, ai_model, backup_enabled, max_subtitle_bytes) plus the four defaults this factory pins for every caller: confidence_threshold 0.8 (the default value, kept configurable by overriding it here rather than in the config file), enable_content_analysis: true, relocation_mode: FileRelocationMode::None and conflict_resolution: ConflictResolution::AutoRename.

confidence_threshold, backup_enabled, relocation_mode and conflict_resolution are caller-controlled: every MatchConfig field is public, so callers SHOULD mutate the returned value (two lines: let mut c = factory.match_config(); c.relocation_mode = mode;) instead of writing a MatchConfig struct literal — a literal must be edited whenever the struct gains a ninth field, this route never needs touching.

§Returns

A freshly built MatchConfig; identical in every field to the one ComponentFactory::create_match_engine constructs.

§Examples
use subx_core::config::TestConfigBuilder;
use subx_core::core::ComponentFactory;

let config_service = TestConfigBuilder::new().build_service();
let factory = ComponentFactory::new(&config_service)?;
let mut match_config = factory.match_config();
match_config.confidence_threshold = 0.9;
assert_eq!(match_config.confidence_threshold, 0.9);
Source

pub fn create_match_engine_with( &self, config: MatchConfig, ) -> Result<MatchEngine>

Create a match engine from a caller-supplied configuration.

Builds the AI provider exactly as every other create_* method does (through ComponentFactory::create_ai_provider), uses config unmodified, and attaches the factory’s reporter to the produced engine — the same propagation terms as ComponentFactory::create_match_engine.

§Arguments
  • config - The match configuration to use verbatim. Prefer deriving it from ComponentFactory::match_config and overwriting the caller-controlled fields.
§Returns

A MatchEngine wired with the factory’s AI provider, the supplied config, and the factory’s reporter.

§Errors

Returns an error if AI provider creation fails.

§Examples
use subx_core::config::TestConfigBuilder;
use subx_core::core::ComponentFactory;
use subx_core::core::matcher::engine::FileRelocationMode;

let config_service = TestConfigBuilder::new().build_service();
let factory = ComponentFactory::new(&config_service)?;
// Two-line relocation-mode override:
let mut match_config = factory.match_config();
match_config.relocation_mode = FileRelocationMode::Copy;
let engine = factory.create_match_engine_with(match_config)?;
Source

pub fn create_match_engine(&self) -> Result<MatchEngine>

Create a match engine with AI configuration.

Returns a properly configured MatchEngine instance using the AI configuration section. Equivalent to create_match_engine_with(match_config()); see ComponentFactory::match_config for the field-by-field contract.

§Errors

Returns an error if AI provider creation fails.

Source

pub fn create_file_manager(&self) -> FileManager

Create a file manager with general configuration.

Returns a properly configured FileManager instance using the general configuration section.

Source

pub fn create_ai_provider(&self) -> Result<Box<dyn AIProvider>>

Create an AI provider with AI configuration.

Returns a properly configured AI provider instance based on the provider type specified in the AI configuration.

§Errors

Returns an error if the provider type is unsupported or provider creation fails.

Source

pub fn config(&self) -> &Config

Get a reference to the current configuration.

Returns a reference to the configuration used by this factory.

Source

pub fn create_vad_sync_detector(&self) -> Result<VadSyncDetector>

Create a VAD sync detector with VAD configuration.

Returns a properly configured VadSyncDetector instance using the VAD settings.

§Errors

Returns an error if VAD sync detector creation fails.

Source

pub fn create_vad_detector(&self) -> Result<LocalVadDetector>

Create a local VAD detector for audio processing.

Returns a properly configured LocalVadDetector instance.

§Errors

Returns an error if local VAD detector initialization fails.

Source

pub fn create_audio_processor(&self) -> Result<VadAudioProcessor>

Create an audio processor for VAD operations.

Returns a properly configured VadAudioProcessor instance.

§Errors

Returns an error if audio processor initialization fails.

Source

pub fn create_translation_engine(&self) -> Result<TranslationEngine>

Create a translation engine using the configured AI provider and translation settings.

§Errors

Returns an error when AI provider creation fails or the configured translation batch size is invalid.

Auto Trait Implementations§

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more