The impls are quiet interesting, I hadn't actually seen that...
But I do think it has a problem, in that this does not compile for me:
let _ = AppResponse::fail(1, 17);
expected struct `std::string::String`, found integral variable
I'm not sure it's wise... It'll create an AppResponse<String, int> if you do fail(1, 17) after fixing, but isn't it better to leave String free? If you want a failed AppResponse<int, int> (e.g. because the method can fail or succeed with an int), do you have any way to create one? Or is mixed the only way?
I may be mistaken about the above, I haven't seen the pattern. Some other notes:
Is the mixed mode really necessary? I don't like the idea... If some items can fail, isn't it better to record a result per item? It feels like, if you get a mixed-mode result, currently all you can really do is treat it as a full error...
If it's necessary to keep mixed mode, I'd still consider using an enum instead of Options. That way you can ensure that a success result never has errors:
enum AppResponse<T=String, E=String> {
Success(T),
Error(E),
Mixed(T, E),
}
Maybe that's my personal preference.
Of course the code isn't useful this way but I presume its a placeholder.
And why clone message?