Почему Таури изменяет имена параметров вызываемых функций?

Я использую Tauri для создания графического интерфейса. В моем бэкэнде я определяю две команды:

#[tauri::command]
fn functional_test(msg: String) {
    println!("Received : {}", msg);
}

#[tauri::command]
fn no_functional_test(my_msg: String) {
    println!("Received : {}", my_msg);
}

fn main() {
    tauri::Builder::default()
        .setup(...)
        .invoke_handler(tauri::generate_handler![functional_test, no_functional_test])
        .run(tauri::generate_context!())
        .expect("failed to run app");
}

Обратите внимание, что единственная разница между этими двумя функциями — это имя параметра: msg и my_msg.

Во внешнем интерфейсе (с использованием реакции) у меня есть этот блок кода:

export function AComponent({name}: {name: string}) {
    useEffect(() => {
        const fetchSomething = async () => {
            try {
                await invoke('functional_test', {msg:"This is a message"})
                await invoke('no_functional_test', {my_msg:"This is also a message"})
            } catch (error) {
                await invoke('functional_test', {msg:error})
            }
        };

        fetchSomething();
    }, [name]);

    return (...)
}

Здесь я пытаюсь вызвать каждую из двух функций. Поскольку я не знаю, как отображать логи фронтенда, для отладки использую рабочую функцию.

Есть вывод:

Received : This is a message
Received : invalid args `myMsg` for command `no_functional_test`: command no_functional_test missing required key myMsg

Очевидно, что первая строка результата — это выполнение 5-й строки кода фронтенда, а вот вторая строка — это выполнение 8-й строки, поскольку 6-я строка вызывает ошибку. Как мы видим, Таури ожидает, что параметр будет иметь имя myMsg, а не my_msg, как я определил его в бэкэнде.

Что происходит? Это нормально?

Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
1
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В руководстве Таури по передаче аргументов команды говорится:

Обратите внимание: при объявлении аргументов в Rust с использованием Snake_case аргументы преобразуются в CamelCase для JavaScript.

Значит, это сделано Тельцом намеренно. Почему? Вероятно, это лучшая попытка следовать соглашениям (snake_case предпочтительнее в Rust, а CamelCase — в Javascript).

Если вы этого не хотите, вы можете настроить это при определении команды:

#[tauri::command(rename_all = "snake_case")]

Кроме того, имейте в виду, что автоматическое переименование влияет только на имена аргументов, а не на содержащиеся в них данные. Таким образом, внешнее имя будет CamelCase, но любые вложенные поля, скорее всего, будут Snake_case (соответствующие стороне Rust), если вы не настроите serde для их переименования через #[serde(rename_all = "camelCase")].

Связанный:

Другие вопросы по теме