Giter Site home page Giter Site logo

rust-qif-parser's Introduction

QIF Parser

Very high performance QIF (Quicken Interchange Format) parser in Rust.

What is QIF?

QIF is a format invented by Quicken to record financial data.

You can read more on this Wikipedia article.

What does this library do?

This library will take your QIF data as a string, parse it, and return some structured data for further processing.

What about performance?

This repository compares the same functionality written in Node.JS and in Rust. If you have both Node and Rust installed, you can run both by doing make compare.

Spoiler alert: for 1 million transaction items, the Node implementation would take about 4 minutes on a M1 Mac, and the Rust implementation a little over... 1 second. We then have a 200x speed difference between the two. Fancy that!

Actual output from my M1 Mac:

Executing both
NODE: Done processing 1000 items. Time it would take to process 1M items: 238793ms
RUST: Done processing 100000 items. Time it would take to process 1M items: 1430ms

Various links

https://en.wikipedia.org/wiki/Quicken_Interchange_Format

https://rust-lang.github.io/api-guidelines/checklist.html

https://stevedonovan.github.io/rust-gentle-intro/6-error-handling.html

Change Log

Version 0.4.0

  • Upgrade dependencies

Version 0.3.0

  • Adding support for Amex QIF files, which include blank lines

Version 0.2.0

  • Implementing useful traits, such as debug, format, clone, serialize and deserialize.
  • Adding Serde as a dependency (for the reason above)
  • Moving files around so it's cleaner and not all the code is in lib.rs
  • BREAKING CHANGE: the Qif object is now returning a "transactions" vec, not "items".
  • Adding a benchmark comparison with Node.JS.

Version 0.1.0

  • Make the code more Rusty (using match instead of if-statements)
  • Support for all the QIF fields as defined in the Wikipedia entry
  • More tests
  • Return &str instead of String on the returned object (except for the date). This should improve performance dramatically.
  • Adding benchmark

Version 0.0.6

  • Use f64 instead of f32

rust-qif-parser's People

Contributors

antoinejaussoin avatar

Stargazers

 avatar David Reaver avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.