Rust 近bindgen宏:不支持的参数类型

Rust 近bindgen宏:不支持的参数类型,rust,nearprotocol,Rust,Nearprotocol,我正在为近区块链编写智能合约承诺界面 我有以下界面: [ext_contracttoken_receiver] pub-trait-ExtTokenReceiver{ fn处理\u令牌\u已接收和自身,发送方\u id:AccountId,金额:余额,消息:[u8]->选项; } 但是,此操作失败,出现以下错误: error: Unsupported argument type. --> src/token.rs:32:1 | 32 | #[ext_contract(token_

我正在为近区块链编写智能合约承诺界面

我有以下界面:

[ext_contracttoken_receiver] pub-trait-ExtTokenReceiver{ fn处理\u令牌\u已接收和自身,发送方\u id:AccountId,金额:余额,消息:[u8]->选项; } 但是,此操作失败,出现以下错误:

error: Unsupported argument type.
  --> src/token.rs:32:1
   |
32 | #[ext_contract(token_receiver)]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)
如何在bindgen宏附近调试 这种情况下不支持的参数类型是什么 如何修复我的界面
对于第一个问题,它说:每晚使用-Z宏backtrace运行,这可以通过编辑项目的build.sh来完成。在rust中调试宏的另一个工具是使用,它将从修改后的AST进行反编译


对于第二个和第三个问题:我猜是[u8],这是一个必须在编译时已知的数组。您应该使用Vec,它可以在需要时强制转换为&[u8]。

对于第一个问题,它说:每晚使用-Z宏backtrace运行,这可以通过编辑项目的build.sh来完成。在rust中调试宏的另一个工具是使用,它将从修改后的AST进行反编译


对于第二个和第三个问题:我猜是[u8],这是一个必须在编译时已知的数组。您应该使用Vec,它可以在需要时强制转换为&[u8]。我相信不支持的参数是[u8]。我已将代码更改为使用Vec,它可以工作:

use near_sdk::ext_contract;

#[ext_contract(token_receiver)]
pub trait ExtTokenReceiver {
    fn process_token_received(
        &self,
        sender_id: AccountId,
        amount: Balance,
        message: Vec<u8>,
    ) -> Option<String>;
}

我认为编译器在编译时不知道静态数组的大小,并且会抱怨这个问题,而Vec是一个动态容器,这很好。

我认为不支持的参数是[u8]。我已将代码更改为使用Vec,它可以工作:

use near_sdk::ext_contract;

#[ext_contract(token_receiver)]
pub trait ExtTokenReceiver {
    fn process_token_received(
        &self,
        sender_id: AccountId,
        amount: Balance,
        message: Vec<u8>,
    ) -> Option<String>;
}
我认为编译器在编译时不知道静态数组的大小,并且会抱怨这个问题,而Vec是一个动态容器,这很好