String
Rust SDK 将 Fuel 的String
表示为SizedAsciiString<LEN>
,其中泛型参数LEN
是给定字符串的长度。这种抽象是必要的,因为 Fuel 和 Sway 中的所有字符串都是静态大小的,即你必须预先知道字符串的大小。
下面是使用SizedAsciiString
创建简单字符串的方法:
let ascii_data = "abc".to_string();
SizedAsciiString::<3>::new(ascii_data)
.expect("should have succeeded since we gave ascii data of correct length!");
为了更轻松地使用SizedAsciiString
,你可以使用try_into()
将 Rust 的String
转换为SizedAsciiString
,并使用into()
将SizedAsciiString
转换为 Rust 的String
。以下是一些示例:
#[test]
fn can_be_constructed_from_str_ref() {
let _: SizedAsciiString<3> = "abc".try_into().expect("should have succeeded");
}
#[test]
fn can_be_constructed_from_string() {
let _: SizedAsciiString<3> = "abc".to_string().try_into().expect("should have succeeded");
}
#[test]
fn can_be_converted_into_string() {
let sized_str = SizedAsciiString::<3>::new("abc".to_string()).unwrap();
let str: String = sized_str.into();
assert_eq!(str, "abc");
}
如果你的合约方法接受和返回 Sway 的str[23]
,在使用 SDK 时,此方法将接受并返回SizedAsciiString<23>
,你可以像这样向其传递字符串:
let _ = contract_instance.methods().takes_string(
"fuell"
.try_into()
.expect("failed to convert string into SizedAsciiString"),
);