From 6fda5cc12cb94b4df8efe25ab6cb414315137286 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 16 Aug 2024 20:04:50 -0400 Subject: [PATCH] inner payload for media files --- .../live_portrait_video_extra_info.rs | 39 +++++++++++++++++++ .../inner_payloads/mod.rs | 1 + .../media_file_extra_info.rs | 21 ++++++++++ .../src/payloads/media_file_extra_info/mod.rs | 2 + crates/lib/mysql_queries/src/payloads/mod.rs | 1 + 5 files changed, 64 insertions(+) create mode 100644 crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/live_portrait_video_extra_info.rs create mode 100644 crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/mod.rs create mode 100644 crates/lib/mysql_queries/src/payloads/media_file_extra_info/media_file_extra_info.rs create mode 100644 crates/lib/mysql_queries/src/payloads/media_file_extra_info/mod.rs diff --git a/crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/live_portrait_video_extra_info.rs b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/live_portrait_video_extra_info.rs new file mode 100644 index 0000000000..529b7473a2 --- /dev/null +++ b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/live_portrait_video_extra_info.rs @@ -0,0 +1,39 @@ +use tokens::tokens::media_files::MediaFileToken; + +/// For things that don't fit in the schema +#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)] +pub struct LivePortraitVideoExtraInfo { + /// The portrait image or video (main source) + #[serde(rename = "p")] // NB: DO NOT CHANGE. It could break live jobs. Renamed to be fewer bytes. + #[serde(skip_serializing_if = "Option::is_none")] + pub maybe_portrait_media_token: Option, + + /// The driver video (face animation driver) + #[serde(rename = "d")] // NB: DO NOT CHANGE. It could break live jobs. Renamed to be fewer bytes. + #[serde(skip_serializing_if = "Option::is_none")] + pub maybe_driver_video_media_token: Option, +} + +#[cfg(test)] +mod tests { + use tokens::tokens::media_files::MediaFileToken; + + use crate::payloads::media_file_extra_info::inner_payloads::live_portrait_video_extra_info::LivePortraitVideoExtraInfo; + use crate::payloads::media_file_extra_info::media_file_extra_info::MediaFileExtraInfo; + + #[test] + fn base_case() { + let payload = MediaFileExtraInfo::L(LivePortraitVideoExtraInfo { + maybe_portrait_media_token: Some(MediaFileToken::new_from_str("portrait")), + maybe_driver_video_media_token: Some(MediaFileToken::new_from_str("driver")), + }); + + let json = r#"{"L":{"p":"portrait","d":"driver"}}"#; + + let serialized = payload.to_string().unwrap(); + assert_eq!(&serialized, json); + + let deserialized = MediaFileExtraInfo::from_str(&json).unwrap(); + assert_eq!(deserialized, payload); + } +} diff --git a/crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/mod.rs b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/mod.rs new file mode 100644 index 0000000000..f33eeeaa70 --- /dev/null +++ b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/inner_payloads/mod.rs @@ -0,0 +1 @@ +pub mod live_portrait_video_extra_info; \ No newline at end of file diff --git a/crates/lib/mysql_queries/src/payloads/media_file_extra_info/media_file_extra_info.rs b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/media_file_extra_info.rs new file mode 100644 index 0000000000..b7eeefc94e --- /dev/null +++ b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/media_file_extra_info.rs @@ -0,0 +1,21 @@ +use errors::AnyhowResult; +use crate::payloads::media_file_extra_info::inner_payloads::live_portrait_video_extra_info::LivePortraitVideoExtraInfo; + +/// For things that don't fit in the schema +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] +pub enum MediaFileExtraInfo { + /// Live Portrait Video + /// NB: Enum variant is short to conserve DB space. + /// NB: DO NOT CHANGE. It could break live jobs. + L(LivePortraitVideoExtraInfo), +} + +impl MediaFileExtraInfo { + pub fn from_str(value: &str) -> AnyhowResult { + Ok(serde_json::from_str(value)?) + } + + pub fn to_string(&self) -> AnyhowResult { + Ok(serde_json::to_string(self)?) + } +} diff --git a/crates/lib/mysql_queries/src/payloads/media_file_extra_info/mod.rs b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/mod.rs new file mode 100644 index 0000000000..528e2f8d08 --- /dev/null +++ b/crates/lib/mysql_queries/src/payloads/media_file_extra_info/mod.rs @@ -0,0 +1,2 @@ +pub mod inner_payloads; +pub mod media_file_extra_info; \ No newline at end of file diff --git a/crates/lib/mysql_queries/src/payloads/mod.rs b/crates/lib/mysql_queries/src/payloads/mod.rs index a11d147071..a088634b00 100644 --- a/crates/lib/mysql_queries/src/payloads/mod.rs +++ b/crates/lib/mysql_queries/src/payloads/mod.rs @@ -2,5 +2,6 @@ pub mod email_sender_jobs; pub mod generic_inference_args; +pub mod media_file_extra_info; pub mod media_upload_modification_details; pub mod prompt_args;