Size: a a a

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

2020 November 28

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну либо конст дженерики, которые скоро стабилизируют в найтли
либо бери массив и ставь ассерт, что это u8
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
При должных ухищрениях это можно делать еще при компиляции по идее.
Но в рантайме точно можно
источник

/

/bin/cat in Rust — русскоговорящее сообществo
источник

/

/bin/cat in Rust — русскоговорящее сообществo
не работает
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
мне для серде нужно в зависимости от значения поля парсит разные типы
то есть у меня есть
{ "ok": true, "index": ... }
и
{ "ok": false, "error": ... }
как я могу на уровне типов сказать что тут может быть или Index или Error?
там же вроде есть из коробки решение
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Тут не в конст дженериках проблема, а в вызове size_of от дженерик типа
источник

/

/bin/cat in Rust — русскоговорящее сообществo
почему так нельзя?
источник

/

/bin/cat in Rust — русскоговорящее сообществo
size_of const вернет
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
потому что компилятор не знает, что size_of работает для любого типа
источник

/

/bin/cat in Rust — русскоговорящее сообществo
идея еще в том, чтобы не передавать размер явно
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну короче это обходится добавлением баунда
[(); size_of<Self::Ty>()]: Sized,
и фичи const_evaluatable_checked
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
но этот баунд придется потом везде таскать
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну короче это обходится добавлением баунда
[(); size_of<Self::Ty>()]: Sized,
и фичи const_evaluatable_checked
а куда добавляется сам баунд?
источник

/

/bin/cat in Rust — русскоговорящее сообществo
обычно, размер UserStruct равен 0 байт
struct UserStruct;
impl Foo for UserStruct {}
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну например если навесить на fn test, то все работает
источник

/

/bin/cat in Rust — русскоговорящее сообществo
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Так нельзя синтаксически.
Сложные баунды навешиваются через where.
fn test<...>(...) where [(); size_of<...>::()] : Sized {
  // test body
}
источник

/

/bin/cat in Rust — русскоговорящее сообществo
Mikail Bagishov
Так нельзя синтаксически.
Сложные баунды навешиваются через where.
fn test<...>(...) where [(); size_of<...>::()] : Sized {
  // test body
}
почему именно () и не указывается T?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
/bin/cat
почему именно () и не указывается T?
По идее можно что угодно вместо () использовать.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
T указывается в самом важном месте - как параметр size_of
источник