From 364a7e4e9cdab92fc2fd419390605091dfbce3a3 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 23 Feb 2026 16:33:53 +0700 Subject: [PATCH] refactor --- crates/lib/artcraft_router/src/client/mod.rs | 1 + .../src/client/multi_router_client.rs | 13 ++++++++++ .../src/client/multi_router_client_builder.rs | 25 +++++++++++++++++++ .../src/client/router_client.rs | 17 +++++++++++++ .../generate_video/generate_video_request.rs | 4 +-- 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 crates/lib/artcraft_router/src/client/multi_router_client.rs create mode 100644 crates/lib/artcraft_router/src/client/multi_router_client_builder.rs create mode 100644 crates/lib/artcraft_router/src/client/router_client.rs diff --git a/crates/lib/artcraft_router/src/client/mod.rs b/crates/lib/artcraft_router/src/client/mod.rs index c7357a2280..3cc8338214 100644 --- a/crates/lib/artcraft_router/src/client/mod.rs +++ b/crates/lib/artcraft_router/src/client/mod.rs @@ -2,3 +2,4 @@ pub mod multi_router_client; pub mod multi_router_client_builder; pub mod request_mismatch_mitigation_strategy; pub mod router_artcraft_client; +pub mod router_client; diff --git a/crates/lib/artcraft_router/src/client/multi_router_client.rs b/crates/lib/artcraft_router/src/client/multi_router_client.rs new file mode 100644 index 0000000000..3d72a1cb88 --- /dev/null +++ b/crates/lib/artcraft_router/src/client/multi_router_client.rs @@ -0,0 +1,13 @@ +use crate::client::router_artcraft_client::RouterArtcraftClient; +use crate::errors::client_error::{ClientError, ClientType}; + +pub struct MultiRouterClient { + pub(crate) artcraft_client: Option, +} + +impl MultiRouterClient { + pub fn get_artcraft_client_ref(&self) -> Result<&RouterArtcraftClient, ClientError> { + self.artcraft_client.as_ref() + .ok_or(ClientError::ClientNotConfigured(ClientType::Artcraft)) + } +} diff --git a/crates/lib/artcraft_router/src/client/multi_router_client_builder.rs b/crates/lib/artcraft_router/src/client/multi_router_client_builder.rs new file mode 100644 index 0000000000..4f4177c009 --- /dev/null +++ b/crates/lib/artcraft_router/src/client/multi_router_client_builder.rs @@ -0,0 +1,25 @@ +use crate::client::router_artcraft_client::RouterArtcraftClient; +use crate::client::multi_router_client::MultiRouterClient; + +pub struct MultiRouterClientBuilder { + artcraft_client: Option, +} + +impl MultiRouterClientBuilder { + pub fn new() -> Self { + Self { + artcraft_client: None, + } + } + + pub fn set_artcraft_client(mut self, client: RouterArtcraftClient) -> Self { + self.artcraft_client = Some(client); + self + } + + pub fn build(self) -> MultiRouterClient { + MultiRouterClient { + artcraft_client: self.artcraft_client, + } + } +} diff --git a/crates/lib/artcraft_router/src/client/router_client.rs b/crates/lib/artcraft_router/src/client/router_client.rs new file mode 100644 index 0000000000..b1b21408a4 --- /dev/null +++ b/crates/lib/artcraft_router/src/client/router_client.rs @@ -0,0 +1,17 @@ +use crate::client::multi_router_client::MultiRouterClient; +use crate::client::router_artcraft_client::RouterArtcraftClient; +use crate::errors::client_error::ClientError; + +pub enum RouterClient { + Multi(MultiRouterClient), + Artcraft(RouterArtcraftClient), +} + +impl RouterClient { + pub fn get_artcraft_client_ref(&self) -> Result<&RouterArtcraftClient, ClientError> { + match self { + RouterClient::Artcraft(client) => Ok(client), + RouterClient::Multi(multi) => multi.get_artcraft_client_ref(), + } + } +} diff --git a/crates/lib/artcraft_router/src/generate/generate_video/generate_video_request.rs b/crates/lib/artcraft_router/src/generate/generate_video/generate_video_request.rs index 64cead2dc5..a162908f9b 100644 --- a/crates/lib/artcraft_router/src/generate/generate_video/generate_video_request.rs +++ b/crates/lib/artcraft_router/src/generate/generate_video/generate_video_request.rs @@ -4,7 +4,7 @@ use crate::api::common_video_model::CommonVideoModel; use crate::api::image_list_ref::ImageListRef; use crate::api::image_ref::ImageRef; use crate::api::provider::Provider; -use crate::client::multi_router_client::MultiRouterClient; +use crate::client::router_client::RouterClient; use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy; pub struct GenerateVideoRequest<'a> { @@ -53,7 +53,7 @@ pub struct GenerateVideoRequest<'a> { pub idempotency_token: Option<&'a str>, /// The polymorphic router client, which can dispatch to multiple providers. - pub client: &'a MultiRouterClient, + pub client: &'a RouterClient, } impl <'a> GenerateVideoRequest<'a> {