diff --git a/Cargo.lock b/Cargo.lock index f5bd11a05..335b33d38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -889,16 +889,6 @@ dependencies = [ "syn 2.0.79", ] -[[package]] -name = "cstr" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68523903c8ae5aacfa32a0d9ae60cadeb764e1da14ee0d26b1f3089f13a54636" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "cxx" version = "1.0.86" @@ -4367,7 +4357,6 @@ dependencies = [ "clap", "colorchoice", "const_format", - "cstr", "duct", "duplicate", "easy-ext", diff --git a/Cargo.toml b/Cargo.toml index 682b5917d..610affaa8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,6 @@ color-eyre = "0.6.3" colorchoice = "1.0.2" comrak = "0.26.0" const_format = "0.2.33" -cstr = "0.2.12" # https://github.com/dtolnay/syn/issues/1502 derive-getters = "0.2.0" derive-new = "0.5.9" derive-syn-parse = "0.2.0" diff --git a/crates/voicevox_core_c_api/Cargo.toml b/crates/voicevox_core_c_api/Cargo.toml index 7c4484907..bec06ef7c 100644 --- a/crates/voicevox_core_c_api/Cargo.toml +++ b/crates/voicevox_core_c_api/Cargo.toml @@ -24,7 +24,6 @@ camino.workspace = true chrono = { workspace = true, default-features = false, features = ["clock"] } colorchoice.workspace = true const_format.workspace = true -cstr.workspace = true duplicate.workspace = true easy-ext.workspace = true educe.workspace = true diff --git a/crates/voicevox_core_c_api/src/drop_check.rs b/crates/voicevox_core_c_api/src/drop_check.rs index 09b94c284..2dd85f3f3 100644 --- a/crates/voicevox_core_c_api/src/drop_check.rs +++ b/crates/voicevox_core_c_api/src/drop_check.rs @@ -107,8 +107,6 @@ impl CStringDropChecker { mod tests { use std::ffi::{c_char, CStr}; - use cstr::cstr; - use super::CStringDropChecker; #[test] @@ -118,7 +116,7 @@ mod tests { )] fn it_denies_duplicated_char_ptr() { let checker = CStringDropChecker::new(); - let s = cstr!("").to_owned(); + let s = c"".to_owned(); checker.whitelist(checker.whitelist(s)); } diff --git a/crates/voicevox_core_c_api/src/result_code.rs b/crates/voicevox_core_c_api/src/result_code.rs index c3515ce0e..645eb289b 100644 --- a/crates/voicevox_core_c_api/src/result_code.rs +++ b/crates/voicevox_core_c_api/src/result_code.rs @@ -1,7 +1,5 @@ use std::ffi::CStr; -use cstr::cstr; - /// 処理結果を示す結果コード。 #[repr(i32)] #[derive(Debug, PartialEq, Eq, Clone, Copy)] @@ -65,56 +63,48 @@ pub enum VoicevoxResultCode { pub(crate) const fn error_result_to_message(result_code: VoicevoxResultCode) -> &'static CStr { use VoicevoxResultCode::*; match result_code { - VOICEVOX_RESULT_NOT_LOADED_OPENJTALK_DICT_ERROR => { - cstr!("OpenJTalkの辞書が読み込まれていません") - } - VOICEVOX_RESULT_GPU_SUPPORT_ERROR => cstr!("GPU機能をサポートすることができません"), + VOICEVOX_RESULT_NOT_LOADED_OPENJTALK_DICT_ERROR => c"OpenJTalkの辞書が読み込まれていません", + VOICEVOX_RESULT_GPU_SUPPORT_ERROR => c"GPU機能をサポートすることができません", VOICEVOX_RESULT_GET_SUPPORTED_DEVICES_ERROR => { - cstr!("サポートされているデバイス情報取得中にエラーが発生しました") + c"サポートされているデバイス情報取得中にエラーが発生しました" } VOICEVOX_RESULT_INIT_INFERENCE_RUNTIME_ERROR => { - cstr!("推論ライブラリのロードまたは初期化ができませんでした") + c"推論ライブラリのロードまたは初期化ができませんでした" } - VOICEVOX_RESULT_OK => cstr!("エラーが発生しませんでした"), - VOICEVOX_RESULT_STYLE_NOT_FOUND_ERROR => cstr!( - "指定されたIDに対するスタイルが見つかりませんでした。音声モデルが読み込まれていないか\ - 、読み込みが解除されています" - ), - VOICEVOX_RESULT_MODEL_NOT_FOUND_ERROR => cstr!( - "指定されたIDに対する音声モデルが見つかりませんでした。読み込まれていないか、読み込み\ - が既に解除されています" - ), - VOICEVOX_RESULT_RUN_MODEL_ERROR => cstr!("推論に失敗しました"), - VOICEVOX_RESULT_EXTRACT_FULL_CONTEXT_LABEL_ERROR => { - cstr!("入力テキストからのフルコンテキストラベル抽出に失敗しました") + VOICEVOX_RESULT_OK => c"エラーが発生しませんでした", + VOICEVOX_RESULT_STYLE_NOT_FOUND_ERROR => { + c"指定されたIDに対するスタイルが見つかりませんでした。音声モデルが読み込まれていない\ + か、読み込みが解除されています" } - VOICEVOX_RESULT_INVALID_UTF8_INPUT_ERROR => cstr!("入力テキストが無効なUTF-8データでした"), - VOICEVOX_RESULT_PARSE_KANA_ERROR => { - cstr!("入力テキストをAquesTalk風記法としてパースすることに失敗しました") + VOICEVOX_RESULT_MODEL_NOT_FOUND_ERROR => { + c"指定されたIDに対する音声モデルが見つかりませんでした。読み込まれていないか、読み込み\ + が既に解除されています" } - VOICEVOX_RESULT_INVALID_AUDIO_QUERY_ERROR => cstr!("無効なaudio_queryです"), - VOICEVOX_RESULT_INVALID_ACCENT_PHRASE_ERROR => cstr!("無効なaccent_phraseです"), - VOICEVOX_RESULT_OPEN_ZIP_FILE_ERROR => cstr!("ZIPファイルのオープンに失敗しました"), - VOICEVOX_RESULT_READ_ZIP_ENTRY_ERROR => { - cstr!("ZIP内のファイルを読むことができませんでした") - } - VOICEVOX_RESULT_INVALID_MODEL_HEADER_ERROR => cstr!("モデルの形式が不正です"), - VOICEVOX_RESULT_MODEL_ALREADY_LOADED_ERROR => cstr!("同じIDのモデルを読むことはできません"), - VOICEVOX_RESULT_STYLE_ALREADY_LOADED_ERROR => { - cstr!("同じIDのスタイルを読むことはできません") + VOICEVOX_RESULT_RUN_MODEL_ERROR => c"推論に失敗しました", + VOICEVOX_RESULT_EXTRACT_FULL_CONTEXT_LABEL_ERROR => { + c"入力テキストからのフルコンテキストラベル抽出に失敗しました" } - VOICEVOX_RESULT_INVALID_MODEL_DATA_ERROR => { - cstr!("モデルデータを読むことができませんでした") + VOICEVOX_RESULT_INVALID_UTF8_INPUT_ERROR => c"入力テキストが無効なUTF-8データでした", + VOICEVOX_RESULT_PARSE_KANA_ERROR => { + c"入力テキストをAquesTalk風記法としてパースすることに失敗しました" } - VOICEVOX_RESULT_LOAD_USER_DICT_ERROR => cstr!("ユーザー辞書を読み込めませんでした"), - VOICEVOX_RESULT_SAVE_USER_DICT_ERROR => cstr!("ユーザー辞書を書き込めませんでした"), + VOICEVOX_RESULT_INVALID_AUDIO_QUERY_ERROR => c"無効なaudio_queryです", + VOICEVOX_RESULT_INVALID_ACCENT_PHRASE_ERROR => c"無効なaccent_phraseです", + VOICEVOX_RESULT_OPEN_ZIP_FILE_ERROR => c"ZIPファイルのオープンに失敗しました", + VOICEVOX_RESULT_READ_ZIP_ENTRY_ERROR => c"ZIP内のファイルを読むことができませんでした", + VOICEVOX_RESULT_INVALID_MODEL_HEADER_ERROR => c"モデルの形式が不正です", + VOICEVOX_RESULT_MODEL_ALREADY_LOADED_ERROR => c"同じIDのモデルを読むことはできません", + VOICEVOX_RESULT_STYLE_ALREADY_LOADED_ERROR => c"同じIDのスタイルを読むことはできません", + VOICEVOX_RESULT_INVALID_MODEL_DATA_ERROR => c"モデルデータを読むことができませんでした", + VOICEVOX_RESULT_LOAD_USER_DICT_ERROR => c"ユーザー辞書を読み込めませんでした", + VOICEVOX_RESULT_SAVE_USER_DICT_ERROR => c"ユーザー辞書を書き込めませんでした", VOICEVOX_RESULT_USER_DICT_WORD_NOT_FOUND_ERROR => { - cstr!("ユーザー辞書に単語が見つかりませんでした") + c"ユーザー辞書に単語が見つかりませんでした" } - VOICEVOX_RESULT_USE_USER_DICT_ERROR => cstr!("OpenJTalkのユーザー辞書の設定に失敗しました"), + VOICEVOX_RESULT_USE_USER_DICT_ERROR => c"OpenJTalkのユーザー辞書の設定に失敗しました", VOICEVOX_RESULT_INVALID_USER_DICT_WORD_ERROR => { - cstr!("ユーザー辞書の単語のバリデーションに失敗しました") + c"ユーザー辞書の単語のバリデーションに失敗しました" } - VOICEVOX_RESULT_INVALID_UUID_ERROR => cstr!("UUIDの変換に失敗しました"), + VOICEVOX_RESULT_INVALID_UUID_ERROR => c"UUIDの変換に失敗しました", } } diff --git a/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_load.rs b/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_load.rs index 620610ed9..25915bc10 100644 --- a/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_load.rs +++ b/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_load.rs @@ -6,7 +6,6 @@ use std::mem::MaybeUninit; use std::sync::LazyLock; use assert_cmd::assert::AssertResult; -use cstr::cstr; use libloading::Library; use serde::{Deserialize, Serialize}; use test_util::c_api::{self, CApi, VoicevoxInitializeOptions, VoicevoxResultCode}; @@ -33,8 +32,8 @@ impl assert_cdylib::TestCase for TestCase { let word = { let mut word = lib.voicevox_user_dict_word_make( - cstr!("this_word_should_not_exist_in_default_dictionary").as_ptr(), - cstr!("アイウエオ").as_ptr(), + c"this_word_should_not_exist_in_default_dictionary".as_ptr(), + c"アイウエオ".as_ptr(), ); word.word_type = c_api::VoicevoxUserDictWordType_VOICEVOX_USER_DICT_WORD_TYPE_PROPER_NOUN; @@ -92,7 +91,7 @@ impl assert_cdylib::TestCase for TestCase { let mut audio_query_without_dict = std::ptr::null_mut(); assert_ok(lib.voicevox_synthesizer_create_audio_query( synthesizer, - cstr!("this_word_should_not_exist_in_default_dictionary").as_ptr(), + c"this_word_should_not_exist_in_default_dictionary".as_ptr(), STYLE_ID, &mut audio_query_without_dict, )); @@ -105,7 +104,7 @@ impl assert_cdylib::TestCase for TestCase { let mut audio_query_with_dict = std::ptr::null_mut(); assert_ok(lib.voicevox_synthesizer_create_audio_query( synthesizer, - cstr!("this_word_should_not_exist_in_default_dictionary").as_ptr(), + c"this_word_should_not_exist_in_default_dictionary".as_ptr(), STYLE_ID, &mut audio_query_with_dict, )); diff --git a/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs b/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs index d3c37f127..1bd6484fe 100644 --- a/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs +++ b/crates/voicevox_core_c_api/tests/e2e/testcases/user_dict_manipulate.rs @@ -10,7 +10,6 @@ use assert_cmd::assert::AssertResult; use tempfile::NamedTempFile; use uuid::Uuid; -use cstr::cstr; use libloading::Library; use serde::{Deserialize, Serialize}; use test_util::c_api::{self, CApi, VoicevoxResultCode, VoicevoxUserDict, VoicevoxUserDictWord}; @@ -58,7 +57,7 @@ impl assert_cdylib::TestCase for TestCase { let dict = lib.voicevox_user_dict_new(); // 単語の追加のテスト - let word = lib.voicevox_user_dict_word_make(cstr!("hoge").as_ptr(), cstr!("ホゲ").as_ptr()); + let word = lib.voicevox_user_dict_word_make(c"hoge".as_ptr(), c"ホゲ".as_ptr()); let word_uuid = add_word(dict, &word); @@ -69,7 +68,7 @@ impl assert_cdylib::TestCase for TestCase { assert_contains_uuid(&json, &word_uuid); // 単語の変更のテスト - let word = lib.voicevox_user_dict_word_make(cstr!("fuga").as_ptr(), cstr!("フガ").as_ptr()); + let word = lib.voicevox_user_dict_word_make(c"fuga".as_ptr(), c"フガ".as_ptr()); assert_ok(lib.voicevox_user_dict_update_word(dict, &word_uuid.into_bytes(), &word)); @@ -84,8 +83,7 @@ impl assert_cdylib::TestCase for TestCase { // 辞書のインポートのテスト。 let other_dict = lib.voicevox_user_dict_new(); - let other_word = - lib.voicevox_user_dict_word_make(cstr!("piyo").as_ptr(), cstr!("ピヨ").as_ptr()); + let other_word = lib.voicevox_user_dict_word_make(c"piyo".as_ptr(), c"ピヨ".as_ptr()); let other_word_uuid = add_word(other_dict, &other_word); @@ -110,7 +108,7 @@ impl assert_cdylib::TestCase for TestCase { // 辞書のセーブ・ロードのテスト let temp_path = NamedTempFile::new().unwrap().into_temp_path(); let temp_path = CString::new(temp_path.to_str().unwrap()).unwrap(); - let word = lib.voicevox_user_dict_word_make(cstr!("hoge").as_ptr(), cstr!("ホゲ").as_ptr()); + let word = lib.voicevox_user_dict_word_make(c"hoge".as_ptr(), c"ホゲ".as_ptr()); let word_uuid = add_word(dict, &word); assert_ok(lib.voicevox_user_dict_save(dict, temp_path.as_ptr()));