Size: a a a

2020 December 01

K

Kitsu in Rust Beginners
George
Пытаюсь сделать передачу параметров ошибки на фронт. Аля
{"code": "TASK_FOR_USER_NOT_FOUND", args: ["4feae5df-448b-48d9-a9a6-3060a6a44caa", "admin", 10, 102930213312]}
может просто serde_json::Value?
источник

G

George in Rust Beginners
Kitsu
= note: conflicting implementation in crate `core`:
         - impl<T> From<T> for T;

собственно вот почему
Ну нет и нет, так код выходит длиннее на пару символов от силы.
источник

G

George in Rust Beginners
Kitsu
может просто serde_json::Value?
🤔
попробую
источник

a

antuan in Rust Beginners
George
Пытаюсь сделать передачу параметров ошибки на фронт. Аля
{"code": "TASK_FOR_USER_NOT_FOUND", args: ["4feae5df-448b-48d9-a9a6-3060a6a44caa", "admin", 10, 102930213312]}
т.е. известны варианты (enum) ошибки? и известны типы args для кажой ошибки?
источник

G

George in Rust Beginners
antuan
т.е. известны варианты (enum) ошибки? и известны типы args для кажой ошибки?
Нет. Ошибки берутся прямо на ходу и потом будут сообщены на фронт. Типа "смари, тут если юзера нет, будет NO_SUCH_USER и будет присылаться id и дата попытки входа, напиши форматирование и локализацию"/
Ошибка формруется в таком формате сейчас. ErrorArguments - просто маркер пока, вместо него предлагают выше попробовать serde_json::Value
источник

G

George in Rust Beginners
Собственно возвращаю из функции ApiError с каким-то кодом и хедерами, из них формируется ответ с константой ошибки, неким телом и комментарием.
источник

G

George in Rust Beginners
Пока из идей был только забор из макросов вида impl_error_ergs!(i32, String, Uuid)
источник

a

antuan in Rust Beginners
я бы сделал:
impl From<ApiError> for ApiErrorBody<...>  {
   fn from(err: ApiErrorBody) -> Self {
       ....
  }
}
источник

r

red75prime in Rust Beginners
Kitsu
= note: conflicting implementation in crate `core`:
         - impl<T> From<T> for T;

собственно вот почему
Специализация в std может использоваться. Наверно ещё какая-то причина есть
источник

a

antuan in Rust Beginners
получится многословно, да. но зато норм. и тогда можно ошибоньки сделать энумом
источник

G

George in Rust Beginners
antuan
я бы сделал:
impl From<ApiError> for ApiErrorBody<...>  {
   fn from(err: ApiErrorBody) -> Self {
       ....
  }
}
источник

G

George in Rust Beginners
body - итоговый JSON, ApiError - обёртка для передачи между цепочками возвратов anyhow::Result<Правильный возврат, ApiError> и итогового проброса в хендлер с одним из кодов и телом.
источник

K

Kitsu in Rust Beginners
red75prime
Специализация в std может использоваться. Наверно ещё какая-то причина есть
со специализацией:

error[E0275]: overflow evaluating the requirement `X<_>: From<X<_>>`
источник

G

George in Rust Beginners
А пока у меня заборы из map_err, которые ещё и ответ в text/plain кладут

(на макросы не смотрите, мне лень писать в чистом SQL в простейших случаях)
источник

G

George in Rust Beginners
А насколько serde_json::Value и конвертации вида json!([1, 2, "hello"]) могут просадить производительность? Ну, в теории
источник

G

George in Rust Beginners
Kitsu
может просто serde_json::Value?
Работает, спасибо!
источник

IP

Iaroslav Postovalov in Rust Beginners
как внутри структуры с дженериком T сделать поле функционального типа, который принимает T, а возвращает bool ?
источник

Jøhn Đøꝩsøn in Rust Beginners
Iaroslav Postovalov
как внутри структуры с дженериком T сделать поле функционального типа, который принимает T, а возвращает bool ?
FnMut(T) -> bool
источник

IP

Iaroslav Postovalov in Rust Beginners
Jøhn Đøꝩsøn
FnMut(T) -> bool
спасибо
источник

IP

Iaroslav Postovalov in Rust Beginners
Jøhn Đøꝩsøn
FnMut(T) -> bool
можно ли что-то сделать с тем, что не известен размер инстансов?
источник