1
This commit is contained in:
@@ -520,8 +520,7 @@ mod tests {
|
||||
})
|
||||
.expect("event data should serialize"),
|
||||
};
|
||||
let catalog_payload =
|
||||
serde_json::to_value(catalog_event).expect("event should serialize");
|
||||
let catalog_payload = serde_json::to_value(catalog_event).expect("event should serialize");
|
||||
assert_eq!(catalog_payload["event"], json!("puzzle_template_catalog"));
|
||||
assert_eq!(
|
||||
catalog_payload["data"]["templates"][0]["templateId"],
|
||||
|
||||
@@ -28,6 +28,13 @@ pub enum VisualNovelAssetSource {
|
||||
External,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum VisualNovelAudioGenerationKind {
|
||||
BackgroundMusic,
|
||||
SoundEffect,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum VisualNovelSceneAvailability {
|
||||
@@ -407,6 +414,59 @@ pub struct VisualNovelCompileResponse {
|
||||
pub work: VisualNovelWorkDetail,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct CreateVisualNovelBackgroundMusicRequest {
|
||||
pub prompt: String,
|
||||
pub title: String,
|
||||
#[serde(default)]
|
||||
pub tags: Option<String>,
|
||||
#[serde(default)]
|
||||
pub model: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct CreateVisualNovelSoundEffectRequest {
|
||||
pub prompt: String,
|
||||
#[serde(default)]
|
||||
pub duration: Option<u8>,
|
||||
#[serde(default)]
|
||||
pub seed: Option<u64>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct VisualNovelAudioGenerationTaskResponse {
|
||||
pub kind: VisualNovelAudioGenerationKind,
|
||||
pub task_id: String,
|
||||
pub provider: String,
|
||||
pub status: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct PublishVisualNovelGeneratedAudioAssetRequest {
|
||||
pub scene_id: String,
|
||||
#[serde(default)]
|
||||
pub profile_id: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct VisualNovelGeneratedAudioAssetResponse {
|
||||
pub kind: VisualNovelAudioGenerationKind,
|
||||
pub task_id: String,
|
||||
pub provider: String,
|
||||
pub status: String,
|
||||
#[serde(default)]
|
||||
pub asset_object_id: Option<String>,
|
||||
#[serde(default)]
|
||||
pub asset_kind: Option<String>,
|
||||
#[serde(default)]
|
||||
pub audio_src: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct SendVisualNovelMessageRequest {
|
||||
@@ -671,6 +731,36 @@ mod tests {
|
||||
assert_eq!(step_payload["sceneId"], json!("scene-1"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn audio_generation_contracts_use_camel_case_fields() {
|
||||
let request = CreateVisualNovelSoundEffectRequest {
|
||||
prompt: "雨声".to_string(),
|
||||
duration: Some(5),
|
||||
seed: Some(12),
|
||||
};
|
||||
let payload = serde_json::to_value(request).expect("request should serialize");
|
||||
assert_eq!(payload["duration"], json!(5));
|
||||
assert_eq!(payload["seed"], json!(12));
|
||||
|
||||
let response = VisualNovelGeneratedAudioAssetResponse {
|
||||
kind: VisualNovelAudioGenerationKind::SoundEffect,
|
||||
task_id: "task-1".to_string(),
|
||||
provider: "vector-engine-vidu".to_string(),
|
||||
status: "completed".to_string(),
|
||||
asset_object_id: Some("assetobj_1".to_string()),
|
||||
asset_kind: Some("visual_novel_ambient_sound".to_string()),
|
||||
audio_src: Some("/generated-custom-world-scenes/a.wav".to_string()),
|
||||
};
|
||||
let payload = serde_json::to_value(response).expect("response should serialize");
|
||||
assert_eq!(payload["kind"], json!("sound_effect"));
|
||||
assert_eq!(payload["taskId"], json!("task-1"));
|
||||
assert_eq!(payload["assetObjectId"], json!("assetobj_1"));
|
||||
assert_eq!(
|
||||
payload["audioSrc"],
|
||||
json!("/generated-custom-world-scenes/a.wav")
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runtime_stream_event_uses_tagged_envelope() {
|
||||
let event = VisualNovelRuntimeStreamEvent::Step {
|
||||
|
||||
Reference in New Issue
Block a user