Size: a a a

Rust — русскоговорящее сообществo

2020 March 27

В

Вафель in Rust — русскоговорящее сообществo
folex
Да, всё так… А как мне через git указать на relative path?
Зачем тебе relative path?

[patch.crates-io]
bar = { git = '...' }
источник

В

Вафель in Rust — русскоговорящее сообществo
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
Почему вот такой код компилится нормально
pub(crate) type CError = Box<dyn std::error::Error>;
pub(crate) type CResult<T> = Result<T, CError>;

pub(crate) fn errors_from_results(results: Vec<CResult<()>>) -> CResult<()> {
   let errs: Vec<CError> = results.into_iter().filter_map(CResult::<()>::err).collect();
   Ok(())
}

а если я хочу его немного обобщить получаю фигу:
pub(crate) type CError = Box<dyn std::error::Error>;
pub(crate) type CResult<T> = Result<T, CError>;

pub(crate) fn errors_from_results<T>(results: T) -> CResult<()>
where
   for<'a> &'a T: IntoIterator<Item = &'a CResult<()>>,
{
   let errs: Vec<CError> = results.into_iter().filter_map(CResult::<()>::err).collect();
   Ok(())
}

а именно
32 |     let errs: Vec<CError> = results.into_iter().filter_map(CResult::<()>::err).collect();
  |                                                            ^^^^^^^^^^^^^^^^^^
  |                                                            |
  |                                                            expected signature of 'fn(&std::result::Result<(), std::boxed::Box<(dyn std::error::Error + 'static)>>) -> _'
  |                                                            found signature of 'fn(std::result::Result<(), std::boxed::Box<dyn std::error::Error>>) -> _'
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
что я упускаю?
источник

В

Вафель in Rust — русскоговорящее сообществo
Может тебе ещё [replace] поможет кстати @folexeyy
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
Зачем тебе relative path?

[patch.crates-io]
bar = { git = '...' }
Смотри, у меня в итоге оказывается две версии libp2p_core:
1. libp2p_core = { path = “./core” }
2. libp2p_core = { git = “https://…” }

Мне нужно пропатчить вторую. Вопрос – что написать в патче?
источник

f

folex in Rust — русскоговорящее сообществo
Мне нечего написать в git, у меня только одна репа с libp2p, и в ней-то всё и лежит
источник

f

folex in Rust — русскоговорящее сообществo
folex
Мне нечего написать в git, у меня только одна репа с libp2p, и в ней-то всё и лежит
(кроме my-package, оно в отдельной репе, конечно)
источник

В

Вафель in Rust — русскоговорящее сообществo
folex
Смотри, у меня в итоге оказывается две версии libp2p_core:
1. libp2p_core = { path = “./core” }
2. libp2p_core = { git = “https://…” }

Мне нужно пропатчить вторую. Вопрос – что написать в патче?
[patch.'https://...']
libp2p_core = { path = './core' }
источник

В

Вафель in Rust — русскоговорящее сообществo
По идее так
источник

f

folex in Rust — русскоговорящее сообществo
ааа! Щас попробую!
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
так ведь можно было бы вместо https сразу писать путь в зависимости?
источник

MV

Mikhail Voronov in Rust — русскоговорящее сообществo
выглядит как будто бы эквивалентно варианту с патчем
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
Михаил Лёсин
Почему вот такой код компилится нормально
pub(crate) type CError = Box<dyn std::error::Error>;
pub(crate) type CResult<T> = Result<T, CError>;

pub(crate) fn errors_from_results(results: Vec<CResult<()>>) -> CResult<()> {
   let errs: Vec<CError> = results.into_iter().filter_map(CResult::<()>::err).collect();
   Ok(())
}

а если я хочу его немного обобщить получаю фигу:
pub(crate) type CError = Box<dyn std::error::Error>;
pub(crate) type CResult<T> = Result<T, CError>;

pub(crate) fn errors_from_results<T>(results: T) -> CResult<()>
where
   for<'a> &'a T: IntoIterator<Item = &'a CResult<()>>,
{
   let errs: Vec<CError> = results.into_iter().filter_map(CResult::<()>::err).collect();
   Ok(())
}

а именно
32 |     let errs: Vec<CError> = results.into_iter().filter_map(CResult::<()>::err).collect();
  |                                                            ^^^^^^^^^^^^^^^^^^
  |                                                            |
  |                                                            expected signature of 'fn(&std::result::Result<(), std::boxed::Box<(dyn std::error::Error + 'static)>>) -> _'
  |                                                            found signature of 'fn(std::result::Result<(), std::boxed::Box<dyn std::error::Error>>) -> _'
помогите советом плз!!
источник

VG

Vadim Galtsev in Rust — русскоговорящее сообществo
Михаил Лёсин
помогите советом плз!!
уже давно было похожее с тайпэлиасами и дженериками
источник

f

folex in Rust — русскоговорящее сообществo
Вафель
По идее так
сработало! 🎉 Спасибо огромное :)
источник

VG

Vadim Galtsev in Rust — русскоговорящее сообществo
Vadim Galtsev
уже давно было похожее с тайпэлиасами и дженериками
скинь пожалуйста код в плейграунде
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
ща сек
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
источник

f

folex in Rust — русскоговорящее сообществo
folex
сработало! 🎉 Спасибо огромное :)
cargo update -p package – оч полезная штука
источник