Конвертировать строку в TokenStream - PullRequest
0 голосов
/ 13 января 2019

Учитывая строку (str), как можно преобразовать ее в TokenStream в Rust?

Я пытался использовать макрос quote!.

let str = "4";
let tokens = quote! { let num = #str; }; // #str is a str not i32

Цель здесь - сгенерировать токены для некоторой неизвестной строки кода.

let thing = "4";
let tokens = quote! { let thing = #thing }; // i32

или

let thing = ""4"";
let tokens = quote! { let thing = #thing }; // str

1 Ответ

0 голосов
/ 14 января 2019

как можно преобразовать [строку] в TokenStream

У Rust есть общая черта для преобразования строк в значения, когда это преобразование может быть неудачным: FromStr. Доступ к нему обычно осуществляется с помощью метода parse на &str.

proc_macro2::TokenStream

use proc_macro2; // 0.4.24

fn example(s: &str) {
    let stream: proc_macro2::TokenStream = s.parse().unwrap();
}

proc_macro::TokenStream

extern crate proc_macro;

fn example(s: &str) {
    let stream: proc_macro::TokenStream = s.parse().unwrap();
}

Вы должны знать, что этот код не может быть запущен вне вызова реального процедурного макроса.

...