Comments (4)
Hi,
it depends on what you want to do. If the data you want to parse can be entirely loaded into memory at once, you don't need pusher, you just call parse-test
with the data slice.
The producers are consumers are here for streaming problems, where data can have no end. pusher
calls the function repeatedly on the input, so if there was a result, it may not be what you want: first one parsed? Last one? a Vec? But then, wouldn't that Vec grow too big?
The consumers are here to be more flexible in producer usage. They allow the creation of a state machine, and the ability to seek within the input (if possible).
Will the producer be useful for your use case? By the way, you do not need to mess with producers and consumers for parser testing. Just load your test file and refer to an indexed slice of that file.
from nom.
I want parse a large file. And want do something with struct Test, for example (pseudocode):
let mut f = FileProducer("myfile.bin");
for i in f.into_iter(parse_test) {
println!("{:?}", i)
// do something
}
or
let mut f = FileProducer("myfile.bin");
loop {
// parse as reading from file handler
let t: Test = parse_test(f);
println!("{:?}", t)
// do something
}
With pusher!() I can parse file, but can't return structs from macros for do something.
from nom.
I see. I could provide another structure that will just apply the same parser over and over. Or provide an iterator
from nom.
Hi!
I think the commit 700c942 should do what you want.
Basically, this structure will wrap a producer, and has a step
method that you call with a closure. It will buffer data as needed, but will not loop as the consumer does. Instead, it returns StepperState::Continue
to let you decide what to do.
Let me know if that could work for you.
from nom.
Related Issues (20)
- What is the right way to parse chunk based file formats?
- [Feature Request] Pratt Parsing combinators HOT 2
- separated_list1 by multipspace0 sep failed HOT 3
- Allow tag/is_not/similar to take u8 in addition to arrays and slices
- docs: Dead link in README
- alt short circuits with Incomplete return HOT 3
- unsigned integer underflow HOT 3
- using `.clone()` on a double reference HOT 1
- Nom's error is referencing data owned by the calling function
- Any other approach to handle left recursion
- How to parse until a range of tags HOT 3
- Mention difference between is_not and take_until in their respective docs.
- I was going to complain about an issue in the function take_while_m_n, but [update : and I will do] ...
- Add u48 number parser HOT 1
- I want to implement `separated_tuple` for 8.0 HOT 7
- `tag_no_case` panicks while matching certain unicode capitalized characters.
- Ergonomics of `alt()` taking tuple versus slice HOT 3
- A new release for 8.0?
- FromStr-esque parsing trait HOT 1
- Float parsing with trailing `e` broken
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 nom.