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)
はちょっと短くなりますが他の型の時に使い回せないので前者の方がまだ良さそう.
何か良い方法があればお教え下さい.