Надеюсь, этого контекста достаточно для вопроса ...
Используя Handlebars с Rust, я пытаюсь реализовать обработчик для обработки этого ввода:
{{toJSON JSON_OBJ_OR_NONE}}
где JSON_OBJ_OR_NONEлибо допустимый фрагмент JSON, например
{
"abc": 123,
"def": ["g", "h", "i"],
"jkl": {
"m": 1,
"n": "op"
}
}
, либо ничего (пустая строка).
То, что он должен вернуть, это либо печатная версия предоставленного JSON, либо "{}"если JSON_OBJ_OR_NONE пуст.
Предоставленный фрагмент JSON полностью произвольный;он может содержать любой допустимый JSON или пустую строку. Вывод должен быть хорошо напечатан.
Я пытался реализовать это множеством разных способов, и сейчас я нахожусь на
handlebars_helper!(toJSON: |json_obj_or_none: str|
if json_obj_or_none.is_empty() {
"{}"
} else {
let s = serde_json::to_string_pretty(&json_obj_or_none).is_ok().to_string();
&s[..]
});
Это выглядит близко, но явидеть
error[E0597]: `s` does not live long enough
--> src/main.rs:145:10
|
145 | &s[..]
| -^----
| ||
| |borrowed value does not live long enough
| borrow later used here
146 | });
| - `s` dropped here while still borrowed
, когда я его компилирую
Хотя это, похоже, близко к рабочему решению, я подозреваю, что есть гораздо более элегантный способ его кодирования.