Comments (6)
Thanks a lot!
from deku.
I'm not at my computer to give an example, but Endian is just a Ctx. You should be able to store it in a struct and use it with #[deku(ctx)]
On another topic, I have a squashfs library that uses deku: https://github.com/wcampbell0x2a/backhand. Although I only support 4.0 so I didn't run into this issue.
from deku.
Actually this is about backhand. I'm trying to parse/modify a big endian squashfs, with qshs magic. While writing the patch I stumbled upon the default endianness being little.
from deku.
😆 of course! And yes, you would need to translate the magic to a Ctx::Endian before sending it to all the children. I haven't don't it, so if you run into deku related problems lmk
from deku.
The need for this arises from the fact, that many routers/APs from the 200x Era use BE Mips with squashfs. Coincidentally, I am working on such devices and squashfs-tools was just like: Deprecating: Meh; Deleting BE support: YESSS!.
from deku.
here's an example of a conditional endian-ness
use deku::ctx::Endian;
use deku::prelude::*;
use std::convert::{TryFrom, TryInto};
#[derive(Debug, PartialEq, DekuRead, DekuWrite)]
#[deku(ctx = "endian: deku::ctx::Endian")]
struct Child {
#[deku(endian = "endian")]
data: u16,
}
#[derive(Debug, PartialEq, DekuRead, DekuWrite)]
struct DekuTest {
criteria: u8,
#[deku(ctx = "if *criteria == 1 { Endian::Big } else { Endian::Little }")]
child: Child,
}
fn main() {
let test_data: &[u8] = [0x01, 0xAB, 0xCD].as_ref();
let test_deku = DekuTest::try_from(test_data).unwrap();
assert_eq!(
DekuTest {
criteria: 0x01,
child: Child { data: 0xABCD },
},
test_deku,
);
let test_deku: Vec<u8> = test_deku.try_into().unwrap();
assert_eq!(test_data.to_vec(), test_deku);
}
from deku.
Related Issues (20)
- Enable MIRI testing
- Help passing context around HOT 1
- Revisit enum id & type
- How to properly debug Deku input data? HOT 4
- Seemingly nonsensical vector count/read_size error HOT 2
- Conditional DekuWrite HOT 3
- Error: Parse("Too much data") using custom readers HOT 1
- Cant "count" from Some(field) directly - need as_ref().unwrap() HOT 1
- Passing a struct in ctx creates opaque error HOT 7
- Doc request: update for structs
- How to access enum-struct members? HOT 4
- Assert for tuple enum HOT 1
- Working with elements of Vec<StructUsingDeku> to get sum of their byte-sizes HOT 4
- Weird parsing with `bool` and non-aligned data. HOT 4
- Is there a way to pad by a variable number of bytes? HOT 3
- Roll a release? HOT 12
- Performance of `read_all` and `count` HOT 2
- Ability to ignore excess bytes HOT 1
- endian attribute breaks enum HOT 2
- Comply to `cond` attribute while encoding
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from deku.