⌘K

Icon LinkString

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"),
);