• 作成:

RustでActixのMessageのresultのエラー値をstrに出来なかった

#[derive(Debug, Message)]
#[rtype(result = "std::result::Result<(), &str>")]
pub struct RequestSmart(pub Arc<Global>);

みたいに書きたい.

error[E0106]: missing lifetime specifier

と怒られる.

Rustの複数の生存期間パラメータでハマった - Kekeの日記の関係のようですね.

複数の生存期間が問題になるならば?を使うのを1つだけにすれば問題ないはず.

というわけで1つの?unwrapにしてみたがダメ. 普通は返り値に&strを書くから寿命関係が類推出来るけれどアノテーションで書いた場合はダメということでしょうか.

確かにアノテーションで書いてもstruct&strを持たせるのと同じでうまくいくはずがありませんね.

ということは明示的に寿命を書いてやれば問題ないのでは?

&'static str と書いてみました.

error[E0515]: cannot return value referencing temporary value

とエラーが出まくりますね.

諦めてString使って

.map_err(|err| err.to_string())

を書きまくりました. これももうちょっと簡単なショートカットあれば良いんですけど…

.map_err(str::to_string)

はちょっと短くなりますが他の型の時に使い回せないので前者の方がまだ良さそう.

何か良い方法があればお教え下さい.