Size: a a a

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

2020 October 13

OA

Oleg Andreev in Rust — русскоговорящее сообществo
ЧЯДНТ
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Можно, например использовать anyhow и аналоги вместо and_then, ok_or и т.д.
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Проще использовать ?
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
ну проблема не в том
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
просто почему-то стдлиба не может это сделать сама
источник

АГ

Алексей Герасимов... in Rust — русскоговорящее сообществo
да уж, do нотация расту с его монадическим подходом ко всему не помешала бы
источник

s🍞

sel 🍞 in Rust — русскоговорящее сообществo
Oleg Andreev
let home = dirs::home_dir().and_then(|s| s.to_str().map(|x|x.to_string()) ).ok_or("Cannot get the home dir to locate the config file".to_string())?;
           PathBuf::from(path.replace("~", &home))
Для начала, это немного неверно, т.к. надо не replace делать, а push
источник

OA

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

OA

Oleg Andreev in Rust — русскоговорящее сообществo
sel 🍞
Для начала, это немного неверно, т.к. надо не replace делать, а push
да, и оно сглючнет на ~username/
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
есть крейт shellexpand, но это какой-то leftpad
источник

K

Kitsu in Rust — русскоговорящее сообществo
Oleg Andreev
вот эта пляска с to_str().to_string() - дополнительный адок.
можно лишнюю вложенность убрать переместив map выше
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
лол, shellexpand молча проглатывает кейс когда home_dir == None
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Oleg Andreev
просто почему-то стдлиба не может это сделать сама
Проигнорировать ошибки?
источник

s🍞

sel 🍞 in Rust — русскоговорящее сообществo
fn expand(path: impl Into<PathBuf>) -> Result<PathBuf, String> {
   let mut path = path.into();
   if let Ok(p) = path.strip_prefix("~/") {
     let mut home = dirs::home_dir().ok_or("No home dir expansion available")?;
     home.push(p);
     path = home;
   }
   Ok(path)
}
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
Andrey Vlasov
Проигнорировать ошибки?
нормально понимать ~/path
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
sel 🍞
fn expand(path: impl Into<PathBuf>) -> Result<PathBuf, String> {
   let mut path = path.into();
   if let Ok(p) = path.strip_prefix("~/") {
     let mut home = dirs::home_dir().ok_or("No home dir expansion available")?;
     home.push(p);
     path = home;
   }
   Ok(path)
}
найс
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Oleg Andreev
нормально понимать ~/path
А canonicalize - или как там эта функция назвается - не умеет?
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
я тоже думал что умеет, но оказалось что нет
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Сделай пр)
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
и у меня на диске появилась папка ~ рядом с бинарником, и пришлось очень аккуратно ее удалять чтоб не было rm -r ~
источник