Rust 近bindgen宏:不支持的参数类型
我正在为近区块链编写智能合约承诺界面 我有以下界面: [ext_contracttoken_receiver] pub-trait-ExtTokenReceiver{ fn处理\u令牌\u已接收和自身,发送方\u id:AccountId,金额:余额,消息:[u8]->选项; } 但是,此操作失败,出现以下错误: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_
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是一个动态容器,这很好