Size: a a a

2020 December 26

w

weflown in Rust Beginners
А, понял.
источник

MB

Mikail Bagishov in Rust Beginners
Если пофиксть это, то печается что-то правдивое
источник

w

weflown in Rust Beginners
Стоп, а каким образом это пофиксить.
источник

w

weflown in Rust Beginners
Не вижу способов
источник

MB

Mikail Bagishov in Rust Beginners
vecind = vecind + 1;
источник

MB

Mikail Bagishov in Rust Beginners
И объявлять как
let mut vecind
источник

w

weflown in Rust Beginners
Спасибо.
источник

w

weflown in Rust Beginners
При этом компилятор при добавлении mut к vecind даёт предупреждение, весело.
источник

MB

Mikail Bagishov in Rust Beginners
Оно пропадет, когда ты начнешь vecind менять
источник

T

Tux in Rust Beginners
как такое провернуть?
источник

T

Tux in Rust Beginners
т.е. чтобы дерайв был только при тестовой сборке
источник

MB

Mikail Bagishov in Rust Beginners
cfg_attr?
источник

T

Tux in Rust Beginners
спасибо, полезная штука)
источник

/

/bin/cat in Rust Beginners
Зачем такое делать?
источник

A

Adatan in Rust Beginners
/bin/cat
Зачем такое делать?
Для изучения/понимания PNG
источник

/

/bin/cat in Rust Beginners
ща скину нормальный способ парса
источник

/

/bin/cat in Rust Beginners
источник

/

/bin/cat in Rust Beginners

#[derive(Debug, Default, PartialEq)]
struct Header;
impl HardcodedPayload for Header {
   type Buf = [u8; 8];
   const PAYLOAD: Self::Buf = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
}

#[derive(Debug, Io)]
struct Image {
   header: Header;
   //Todo: chunks
}

fn main() {
   dbg!(Image::read(&mut slice).unwrap());
}
источник

/

/bin/cat in Rust Beginners
Собственно эта либа позволяет написать декод чанка в одной структуре без le/be bytes
источник

/

/bin/cat in Rust Beginners
@Adatan
Один раз пишется
impl Io for Vec<Chunk>
impl Io for Chunk
Header (тот же impl через специализацию)
Потом все выводится автоматически при написании следующих структур

В nightly можно сделать даже enum для каждого чанка


#[derive(Debug, Io)]
#[endian(big)]
struct ChunkData { len: u32, ... };

#[derive(Debug, Io)]
#[endian(big)]
#[repr(u32)]
enum Chunk {
   IDAT(ChunkData) = u32::from_ne_bytes(*b"IDAT"),
   // ...
}


Chunk::read вернет Result<Chunk>, если чанк нашелся в enum
источник