diff --git a/README.md b/README.md
index 5f0e41b..1d2b2b1 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+
# Awesome Rust
A curated list of awesome Rust code and resources. Inspired by the other [awesome lists](https://github.com/bayandin/awesome-awesomeness).
@@ -23,9 +24,9 @@ Only projects that are stable and useful to users are added. Projects that do no
- [Web programming](#web-programming)
- [Resources](#resources)
-
## Code
+
### Audio
* [bjz/openal-rs](https://github.com/bjz/openal-rs/) — [OpenAL 1.1](http://www.openal.org/) bindings
@@ -43,14 +44,15 @@ Only projects that are stable and useful to users are added. Projects that do no
### Command-line argument parsing
- * [docopt/docopt.rs](https://github.com/docopt/docopt.rs) — a [DocOpt](http://docopt.org) port to Rust
- * [wycats/hammer.rs](https://github.com/wycats/hammer.rs) —
+* [docopt/docopt.rs](https://github.com/docopt/docopt.rs) — a [DocOpt](http://docopt.org) port to Rust
+* [wycats/hammer.rs](https://github.com/wycats/hammer.rs)
### Compression
* [lifthrasiir/rust-zip](https://github.com/lifthrasiir/rust-zip) — read and write ZIP archives [
](https://travis-ci.org/lifthrasiir/rust-zip)
### Computation
+
* [eholk/rust-opencl](https://github.com/eholk/rust-opencl) — [OpenCL](https://www.khronos.org/opencl/) bindings [
](https://travis-ci.org/eholk/rust-opencl)
### Cryptography
@@ -65,36 +67,36 @@ Only projects that are stable and useful to users are added. Projects that do no
* MySql
* [blackbeam/rust-mysql-simple](https://github.com/blackbeam/rust-mysql-simple) — a native MySql client [
](https://travis-ci.org/blackbeam/rust-mysql-simple)
* PostgreSql
- * [sfackler/rust-postgres](https://github.com/sfackler/rust-postgres) — a native [PostgreSQL](http://www.postgresql.org) client [
](https://travis-ci.org/sfackler/rust-postgres)
+ * [sfackler/rust-postgres](https://github.com/sfackler/rust-postgres) — a native [PostgreSQL](http://www.postgresql.org) client [
](https://travis-ci.org/sfackler/rust-postgres)
* Sqlite
- * [linuxfood/rustsqlite](https://github.com/linuxfood/rustsqlite) — [Sqlite3](http://www.sqlite.org) bindings
+ * [linuxfood/rustsqlite](https://github.com/linuxfood/rustsqlite) — [Sqlite3](http://www.sqlite.org/) bindings
### Encoding
* Cap'n Proto
- * [dwrensha/capnproto-rust](https://github.com/dwrensha/capnproto-rust) — [
](https://travis-ci.org/dwrensha/capnproto-rust)
+ * [dwrensha/capnproto-rust](https://github.com/dwrensha/capnproto-rust) — [
](https://travis-ci.org/dwrensha/capnproto-rust)
* Character Encoding
- * [lifthrasiir/rust-encoding](https://github.com/lifthrasiir/rust-encoding) — [
](https://travis-ci.org/lifthrasiir/rust-encoding)
+ * [lifthrasiir/rust-encoding](https://github.com/lifthrasiir/rust-encoding) — [
](https://travis-ci.org/lifthrasiir/rust-encoding)
* CSV
- * [BurntSushi/rust-csv](https://github.com/BurntSushi/rust-csv) — [
](https://travis-ci.org/BurntSushi/rust-csv)
+ * [BurntSushi/rust-csv](https://github.com/BurntSushi/rust-csv) — [
](https://travis-ci.org/BurntSushi/rust-csv)
* [Geal/rust-csv](https://github.com/Geal/rust-csv) — [
](https://travis-ci.org/Geal/rust-csv)
* MsgPck
* [mneumann/rust-msgpack](https://github.com/mneumann/rust-msgpack) — [
](https://travis-ci.org/mneumann/rust-msgpack)
* ProtocolBuffers
* [stepancheg/rust-protobuf](https://github.com/stepancheg/rust-protobuf) — [
](https://travis-ci.org/stepancheg/rust-protobuf)
* TOML
- * [alexcrichton/toml-rs](https://github.com/alexcrichton/toml-rs) —
+ * [alexcrichton/toml-rs](https://github.com/alexcrichton/toml-rs)
* Tnetstring
* [erickt/rust-tnetstring](https://github.com/erickt/rust-tnetstring) — [
](https://travis-ci.org/erickt/rust-tnetstring)
* XML
- * [bjz/sax-rs](https://github.com/bjz/sax-rs) — bindings to libxml2's SAX parser [
](https://travis-ci.org/bjz/sax-rs)
- * [DanielFath/xml-parser](https://github.com/DanielFath/xml-parser) — A hybrid pull, DOM parser written in pure Rust [](https://travis-ci.org/DanielFath/xml-parser)
- * [Florob/RustyXML](https://github.com/Florob/RustyXML) — an XML parser written in Rust [
](https://travis-ci.org/Florob/RustyXML)
- * [netvl/rust-xml](https://github.com/netvl/rust-xml) — a streaming XML library [
](https://travis-ci.org/netvl/rust-xml)
+ * [bjz/sax-rs](https://github.com/bjz/sax-rs) — bindings to libxml2's SAX parser [
](https://travis-ci.org/bjz/sax-rs)
+ * [DanielFath/xml-parser](https://github.com/DanielFath/xml-parser) — A hybrid pull, DOM parser written in pure Rust [
](https://travis-ci.org/DanielFath/xml-parser)
+ * [Florob/RustyXML](https://github.com/Florob/RustyXML) — an XML parser written in Rust [
](https://travis-ci.org/Florob/RustyXM)
+ * [netvl/rust-xml](https://github.com/netvl/rust-xml) — a streaming XML library [
](https://travis-ci.org/netvl/rust-xml)
### Game development
-* [JeremyLetang/rustenstein3D/](https://github.com/JeremyLetang/rustenstein3D/) — a raycasting engine in rust
+* [JeremyLetang/rustenstein3D](https://github.com/JeremyLetang/rustenstein3D/) — a raycasting engine in rust
### Games
@@ -103,16 +105,16 @@ Only projects that are stable and useful to users are added. Projects that do no
### GUI
* Cocoa
- * [mozilla-servo/rust-cocoa](https://github.com/mozilla-servo/rust-cocoa) —
-* Gtk
- * [JeremyLetang/rgtk](https://github.com/JeremyLetang/rgtk) — [GTK+](http://www.gtk.org) bindings [
](https://travis-ci.org/jeremyletang/rgtk)
+ * [mozilla-servo/rust-cocoa](https://github.com/mozilla-servo/rust-cocoa)
+* Gtk+
+ * [JeremyLetang/rgtk](https://github.com/JeremyLetang/rgtk) — [Gtk+](http://www.gtk.org) bindings [
](https://travis-ci.org/jeremyletang/rgtk)
* ncurses
- * [jeaye/ncurses-rs](https://github.com/jeaye/ncurses-rs) — [](https://travis-ci.org/jeaye/ncurses-rs.png)
+ * [jeaye/ncurses-rs](https://github.com/jeaye/ncurses-rs) — [
](https://travis-ci.org/jeaye/ncurses-rs)
* SDL
- * [AngryLawyer/rust-sdl2](https://github.com/AngryLawyer/rust-sdl2) — [SDL2](http://www.libsdl.org/) bindings [](https://travis-ci.org/AngryLawyer/rust-sdl2)
- * [brson/rust-sdl](https://github.com/brson/rust-sdl) — [SDL](http://www.libsdl.org/) bindings [
](https://travis-ci.org/brson/rust-sdl)
+ * [AngryLawyer/rust-sdl2](https://github.com/AngryLawyer/rust-sdl2) — [SDL2](http://www.libsdl.org/) bindings [
](https://travis-ci.org/AngryLawyer/rust-sdl2)
+ * [brson/rust-sdl](https://github.com/brson/rust-sdl) — [SDL1](http://www.libsdl.org/) bindings [
](https://travis-ci.org/brson/rust-sdl)
* Termbox
- * [gchp/rustbox](https://github.com/gchp/rustbox) — a Rust implementation of [termbox](http://github.com/nsf/termbox).
+ * [gchp/rustbox](https://github.com/gchp/rustbox) — a Rust implementation of [termbox]() http://github.com/nsf/termbox
### Network programming
@@ -126,26 +128,26 @@ Only projects that are stable and useful to users are added. Projects that do no
### Testing
-* [BurntSushi/quickcheck](https://github.com/BurntSushi/quickcheck) — property-based testing using randomly generated input. [
](https://travis-ci.org/BurntSushi/quickcheck)
-* [farcaller/shiny](https://github.com/farcaller/shiny) — a fancy syntax similar to ruby's rspec or Objective-C's kiwi.
+* [BurntSushi/quickcheck](https://github.com/BurntSushi/quickcheck) — property-based testing using randomly generated input [
](https://travis-ci.org/BurntSushi/quickcheck)
+* [farcaller/shiny](https://github.com/farcaller/shiny) — a fancy syntax similar to ruby's rspec or Objective-C's kiwi
### Web programming
-See also http://arewewebyet.com/
+See also [http://arewewebyet.com/](http://arewewebyet.com/)
- * core
- * [chris-morgan/rust-http](https://github.com/chris-morgan/rust-http) — will be replaced by [Teepee](http://teepee.rs/). [
](https://travis-ci.org/chris-morgan/rust-http)
- * [hyperium/hyper](https://github.com/hyperium/hyper) — [
](https://travis-ci.org/hyperium/hyper)
- * client
- * [carllerche/curl-rust](https://github.com/carllerche/curl-rust) — [libcurl](http://curl.haxx.se/libcurl/) bindings
- * [vhbit/curl-rs](https://github.com/vhbit/curl-rs) — [libcurl](http://curl.haxx.se/libcurl/) bindings [
](https://travis-ci.org/vhbit/curl-rs)
- * server
- * [erickt/rust-mongrel2](https://github.com/erickt/rust-mongrel2) — [Mongrel2](http://mongrel2.org) bindings [
](https://travis-ci.org/erickt/rust-mongrel2)
- * [Iron](http://ironframework.io/) — inspired by [Express](http://expressjs.com/). [
](https://travis-ci.org/iron/iron)
- * [Nickel](http://nickel.rs/) — inspired by [Express](http://expressjs.com/).
+* Core
+ * [chris-morgan/rust-http](https://github.com/chris-morgan/rust-http) — will be replaced by [Teepee](http://teepee.rs/) [
](https://travis-ci.org/chris-morgan/rust-http)
+ * [hyperium/hyper](https://github.com/hyperium/hyper) — [
](https://travis-ci.org/hyperium/hyper)
+* Client
+ * [carllerche/curl-rust](https://github.com/carllerche/curl-rust) — [libcurl](http://curl.haxx.se/libcurl/) bindings
+ * [vhbit/curl-rs](https://github.com/vhbit/curl-rs) — [libcurl](http://curl.haxx.se/libcurl/) bindings [
](https://travis-ci.org/vhbit/curl-rs.png?branch=master)
+* Server
+ * [erickt/rust-mongrel2](https://github.com/erickt/rust-mongrel2) — [Mongrel2](http://mongrel2.org) bindings [
](https://travis-ci.org/erickt/rust-mongrel2.png?branch=master)
+ * [Iron](http://ironframework.io/) — inspired by [Express](http://expressjs.com/) [
](https://travis-ci.org/iron/iron.png?branch=master)
+ * [Nickel](http://nickel.rs/) — inspired by [Express](http://expressjs.com/)
## Resources
- * [Rust by Example](http://rustbyexample.com/)
- * [Rust CI](http://www.rust-ci.org) — a [Travis CI](https://travis-ci.com) dashboard for Rust projects
- * [Rust Guidelines](http://aturon.github.io)
+* [Rust by Example](http://rustbyexample.com/)
+* [Rust CI](http://www.rust-ci.org) — a [Travis CI](https://travis-ci.com) dashboard for Rust projects
+* [Rust Guidelines](http://aturon.github.io)
\ No newline at end of file
diff --git a/generate_markdown_files.py b/generate_markdown_files.py
new file mode 100644
index 0000000..42f1300
--- /dev/null
+++ b/generate_markdown_files.py
@@ -0,0 +1,530 @@
+# -*- coding: utf-8 -*-
+
+def md_link(name, url):
+ "Returns a web link in Markdown format"
+ return '[%s](%s)' % (name, url)
+
+DATA = \
+ {
+ "bjz/openal-rs": {
+ "url": "https://github.com/bjz/openal-rs/",
+ "descr": md_link('OpenAL 1.1', 'http://www.openal.org/') + " bindings"
+ },
+ "JeremyLetang/ears": {
+ "url": "https://github.com/JeremyLetang/ears",
+ "descr": "a simple library to play Sounds and Musics, on top of OpenAL and libsndfile",
+ "travis_url": "https://travis-ci.org/JeremyLetang/ears",
+ "travis_badge": "https://travis-ci.org/jeremyletang/ears.png?branch=master"
+ },
+ "JeremyLetang/rust-portaudio": {
+ "url": "https://github.com/JeremyLetang/rust-portaudio",
+ "descr": md_link('PortAudio', 'http://www.portaudio.com/') + " bindings",
+ "travis_url": "https://travis-ci.org/JeremyLetang/rust-portaudio",
+ "travis_badge": "https://travis-ci.org/jeremyletang/rust-portaudio.png?branch=master"
+ },
+ "musitdev/rust-portmidi": {
+ "url": "https://github.com/musitdev/rust-portmidi",
+ "descr": md_link('PortMidi', 'http://portmedia.sourceforge.net/portmidi/') + " bindings",
+ "travis_url": "https://travis-ci.org/musitdev/rust-portmidi",
+ "travis_badge": "https://travis-ci.org/musitdev/rust-portmidi.png?branch=master"
+ },
+ "Cargo": {
+ "url": "http://crates.io",
+ "descr": "the Rust package manager"
+ },
+ "SiegeLord/RustCMake": {
+ "url": "https://github.com/SiegeLord/RustCMake",
+ "descr": "an example project showing usage of CMake with Rust",
+ "travis_url": "https://travis-ci.org/SiegeLord/RustCMake",
+ "travis_badge": "https://travis-ci.org/SiegeLord/RustCMake.png?branch=master"
+ },
+ "PistonDevelopers/rust-empty": {
+ "url": "https://github.com/PistonDevelopers/rust-empty",
+ "descr": "a Makefile to get started with Rust"
+ },
+ "docopt/docopt.rs": {
+ "url": "https://github.com/docopt/docopt.rs",
+ "descr": "a " + md_link('DocOpt', 'http://docopt.org') + " port to Rust"
+ },
+ "wycats/hammer.rs": {
+ "url": "https://github.com/wycats/hammer.rs"
+ },
+ "lifthrasiir/rust-zip": {
+ "url": "https://github.com/lifthrasiir/rust-zip",
+ "descr": "read and write ZIP archives",
+ "travis_url": "https://travis-ci.org/lifthrasiir/rust-zip",
+ "travis_badge": "https://travis-ci.org/lifthrasiir/rust-zip.png?branch=master"
+ },
+ "eholk/rust-opencl": {
+ "url": "https://github.com/eholk/rust-opencl",
+ "descr": md_link('OpenCL', 'https://www.khronos.org/opencl/') + " bindings",
+ "travis_url": "https://travis-ci.org/eholk/rust-opencl",
+ "travis_badge": "https://travis-ci.org/eholk/rust-opencl.png?branch=master"
+ },
+ "DaGenix/rust-crypto": {
+ "url": "https://github.com/DaGenix/rust-crypto",
+ "descr": "cryptographic algorithms in Rust",
+ "travis_url": "https://travis-ci.org/DaGenix/rust-crypto",
+ "travis_badge": "https://travis-ci.org/DaGenix/rust-crypto.png?branch=master"
+ },
+ "dnaq/sodiumoxide": {
+ "url": "https://github.com/dnaq/sodiumoxide",
+ "descr": md_link('libsodium', 'https://github.com/jedisct1/libsodium') + " bindings"
+ },
+ "sfackler/rust-openssl": {
+ "url": "https://github.com/sfackler/rust-openssl",
+ "descr": "OpenSSL bindings",
+ "travis_url": "https://travis-ci.org/sfackler/rust-openssl",
+ "travis_badge": "https://travis-ci.org/sfackler/rust-openssl.png?branch=master"
+ },
+ "blackbeam/rust-mysql-simple": {
+ "url": "https://github.com/blackbeam/rust-mysql-simple",
+ "descr": "a native MySql client",
+ "travis_url": "https://travis-ci.org/blackbeam/rust-mysql-simple",
+ "travis_badge": "https://travis-ci.org/blackbeam/rust-mysql-simple.png?branch=master"
+ },
+ "sfackler/rust-postgres": {
+ "url": "https://github.com/sfackler/rust-postgres",
+ "descr": "a native " + md_link('PostgreSQL', 'http://www.postgresql.org') + " client",
+ "travis_url": "https://travis-ci.org/sfackler/rust-postgres",
+ "travis_badge": "https://travis-ci.org/sfackler/rust-postgres.png?branch=master"
+ },
+ "linuxfood/rustsqlite": {
+ "url": "https://github.com/linuxfood/rustsqlite",
+ "descr": md_link('Sqlite3', 'http://www.sqlite.org/') + " bindings",
+ },
+ "dwrensha/capnproto-rust": {
+ "url": "https://github.com/dwrensha/capnproto-rust",
+ "travis_url": "https://travis-ci.org/dwrensha/capnproto-rust",
+ "travis_badge": "https://travis-ci.org/dwrensha/capnproto-rust.png?branch=master"
+ },
+ "lifthrasiir/rust-encoding": {
+ "url": "https://github.com/lifthrasiir/rust-encoding",
+ "travis_url": "https://travis-ci.org/lifthrasiir/rust-encoding",
+ "travis_badge": "https://travis-ci.org/lifthrasiir/rust-encoding.png?branch=master"
+ },
+ "BurntSushi/rust-csv": {
+ "url": "https://github.com/BurntSushi/rust-csv",
+ "travis_url": "https://travis-ci.org/BurntSushi/rust-csv",
+ "travis_badge": "https://api.travis-ci.org/BurntSushi/rust-csv.png?branch=master"
+ },
+ "Geal/rust-csv": {
+ "url": "https://github.com/Geal/rust-csv",
+ "travis_url": "https://travis-ci.org/Geal/rust-csv",
+ "travis_badge": "https://travis-ci.org/Geal/rust-csv.png?branch=master"
+ },
+ "mneumann/rust-msgpack": {
+ "url": "https://github.com/mneumann/rust-msgpack",
+ "travis_url": "https://travis-ci.org/mneumann/rust-msgpack",
+ "travis_badge": "https://travis-ci.org/mneumann/rust-msgpack.png?branch=master"
+ },
+ "stepancheg/rust-protobuf": {
+ "url": "https://github.com/stepancheg/rust-protobuf",
+ "travis_url": "https://travis-ci.org/stepancheg/rust-protobuf",
+ "travis_badge": "https://travis-ci.org/stepancheg/rust-protobuf.png?branch=master"
+ },
+ "alexcrichton/toml-rs": {
+ "url": "https://github.com/alexcrichton/toml-rs"
+ },
+ "erickt/rust-tnetstring": {
+ "url": "https://github.com/erickt/rust-tnetstring",
+ "travis_url": "https://travis-ci.org/erickt/rust-tnetstring",
+ "travis_badge": "https://travis-ci.org/erickt/rust-tnetstring.png?branch=master"
+ },
+ "bjz/sax-rs": {
+ "url": "https://github.com/bjz/sax-rs",
+ "descr": "bindings to libxml2's SAX parser",
+ "travis_url": "https://travis-ci.org/bjz/sax-rs",
+ "travis_badge": "https://travis-ci.org/bjz/sax-rs.png?branch=master"
+ },
+ "DanielFath/xml-parser": {
+ "url": "https://github.com/DanielFath/xml-parser",
+ "descr": "A hybrid pull, DOM parser written in pure Rust",
+ "travis_url": "https://travis-ci.org/DanielFath/xml-parser",
+ "travis_badge": "https://travis-ci.org/DanielFath/xml-parser.png?branch=master"
+ },
+ "Florob/RustyXML": {
+ "url": "https://github.com/Florob/RustyXML",
+ "descr": "an XML parser written in Rust",
+ "travis_url": "https://travis-ci.org/Florob/RustyXM",
+ "travis_badge": "https://travis-ci.org/Florob/RustyXML.png?branch=master"
+ },
+ "netvl/rust-xml": {
+ "url": "https://github.com/netvl/rust-xml",
+ "descr": "a streaming XML library",
+ "travis_url": "https://travis-ci.org/netvl/rust-xml",
+ "travis_badge": "https://travis-ci.org/netvl/rust-xml.png?branch=master"
+ },
+ "JeremyLetang/rustenstein3D": {
+ "url": "https://github.com/JeremyLetang/rustenstein3D/",
+ "descr": "a raycasting engine in rust",
+ "travis_url": "",
+ "travis_badge": ""
+ },
+ "lifthrasiir/angolmois-rust": {
+ "url": "https://github.com/lifthrasiir/angolmois-rust",
+ "descr": "a minimalistic music video game which supports the BMS format",
+ "travis_url": "https://travis-ci.org/lifthrasiir/angolmois-rust",
+ "travis_badge": "https://travis-ci.org/lifthrasiir/angolmois-rust.png?branch=master"
+ },
+ "mozilla-servo/rust-cocoa": {
+ "url": "https://github.com/mozilla-servo/rust-cocoa"
+ },
+ "JeremyLetang/rgtk": {
+ "url": "https://github.com/JeremyLetang/rgtk",
+ "descr": md_link('Gtk+', 'http://www.gtk.org') + " bindings",
+ "travis_url": "https://travis-ci.org/jeremyletang/rgtk",
+ "travis_badge": "https://travis-ci.org/jeremyletang/rgtk.png?branch=master"
+ },
+ "jeaye/ncurses-rs": {
+ "url": "https://github.com/jeaye/ncurses-rs",
+ "travis_url": "https://travis-ci.org/jeaye/ncurses-rs",
+ "travis_badge": "https://travis-ci.org/jeaye/ncurses-rs.png?branch=master"
+ },
+ "AngryLawyer/rust-sdl2": {
+ "url": "https://github.com/AngryLawyer/rust-sdl2",
+ "descr": md_link('SDL2', 'http://www.libsdl.org/') + " bindings",
+ "travis_url": "https://travis-ci.org/AngryLawyer/rust-sdl2",
+ "travis_badge": "https://travis-ci.org/AngryLawyer/rust-sdl2.png?branch=master"
+ },
+ "brson/rust-sdl": {
+ "url": "https://github.com/brson/rust-sdl",
+ "descr": md_link('SDL1', 'http://www.libsdl.org/') + " bindings",
+ "travis_url": "https://travis-ci.org/brson/rust-sdl",
+ "travis_badge": "https://travis-ci.org/brson/rust-sdl.png?branch=master"
+ },
+ "gchp/rustbox": {
+ "url": "https://github.com/gchp/rustbox",
+ "descr": "a Rust implementation of " + md_link('termbox', '') + " http://github.com/nsf/termbox"
+ },
+ "erickt/rust-zmq": {
+ "url": "https://github.com/erickt/rust-zmq",
+ "descr": md_link('ZeroMQ', 'http://zeromq.org') + " bindings",
+ "travis_url": "https://travis-ci.org/erickt/rust-zmq",
+ "travis_badge": "https://travis-ci.org/erickt/rust-zmq.png?branch=master"
+ },
+ "erickt/rust-mustache": {
+ "url": "https://github.com/erickt/rust-mustache",
+ "travis_url": "https://travis-ci.org/erickt/rust-mustache",
+ "travis_badge": "https://travis-ci.org/erickt/rust-mustache.png?branch=master"
+ },
+ "BurntSushi/quickcheck": {
+ "url": "https://github.com/BurntSushi/quickcheck",
+ "descr": "property-based testing using randomly generated input",
+ "travis_url": "https://travis-ci.org/BurntSushi/quickcheck",
+ "travis_badge": "https://travis-ci.org/BurntSushi/quickcheck.png?branch=master"
+ },
+ "farcaller/shiny": {
+ "url": "https://github.com/farcaller/shiny",
+ "descr": "a fancy syntax similar to ruby's rspec or Objective-C's kiwi"
+ },
+ "chris-morgan/rust-http": {
+ "url": "https://github.com/chris-morgan/rust-http",
+ "descr": "will be replaced by " + md_link('Teepee', 'http://teepee.rs/'),
+ "travis_url": "https://travis-ci.org/chris-morgan/rust-http",
+ "travis_badge": "https://travis-ci.org/chris-morgan/rust-http.png?branch=master"
+ },
+ "hyperium/hyper": {
+ "url": "https://github.com/hyperium/hyper",
+ "travis_url": "https://travis-ci.org/hyperium/hyper",
+ "travis_badge": "https://travis-ci.org/hyperium/hyper.png?branch=master"
+ },
+ "carllerche/curl-rust": {
+ "url": "https://github.com/carllerche/curl-rust",
+ "descr": md_link('libcurl', 'http://curl.haxx.se/libcurl/') + " bindings"
+ },
+ "vhbit/curl-rs": {
+ "url": "https://github.com/vhbit/curl-rs",
+ "descr": md_link('libcurl', 'http://curl.haxx.se/libcurl/') + " bindings",
+ "travis_url": "https://travis-ci.org/vhbit/curl-rs.png?branch=master",
+ "travis_badge": "https://travis-ci.org/vhbit/curl-rs"
+ },
+ "erickt/rust-mongrel2": {
+ "url": "https://github.com/erickt/rust-mongrel2",
+ "descr": md_link('Mongrel2', 'http://mongrel2.org') + " bindings",
+ "travis_url": "https://travis-ci.org/erickt/rust-mongrel2.png?branch=master",
+ "travis_badge": "https://travis-ci.org/erickt/rust-mongrel2"
+ },
+ "Iron": {
+ "url": "http://ironframework.io/",
+ "descr": "inspired by " + md_link('Express', 'http://expressjs.com/'),
+ "travis_url": "https://travis-ci.org/iron/iron.png?branch=master",
+ "travis_badge": "https://travis-ci.org/iron/iron"
+ },
+ "Nickel": {
+ "url": "http://nickel.rs/",
+ "descr": "inspired by " + md_link('Express', 'http://expressjs.com/')
+ },
+ "Rust by Example": {
+ "url": "http://rustbyexample.com/",
+ "section": ["resources"]
+ },
+ "Rust CI": {
+ "url": "http://www.rust-ci.org",
+ "descr": "a " + md_link('Travis CI', 'https://travis-ci.com') + " dashboard for Rust projects",
+ "section": ["resources"]
+ },
+ "Rust Guidelines": {
+ "url": "http://aturon.github.io",
+ "section": ["resources"]
+ }
+ }
+
+
+
+"""
+ {
+ "",
+ "url": "",
+ "descr": " " + md_link('', '') + " ",
+ "travis_url": "",
+ "travis_badge": "",
+ "unstable": True
+ },
+
+## Game development
+
+* OpenGL
+ * [bjz/gl-rs](https://github.com/bjz/gl-rs) An OpenGL function pointer loader for Rust [
](https://travis-ci.org/bjz/gl-rs)
+ * [servo/rust-opengles](https://github.com/mozilla-servo/rust-opengles) OpenGL ES 2.0 bindings for Rust
+* Windowing
+ * [bjz/glfw-rs](https://github.com/bjz/glfw-rs) GLFW3 bindings and idiomatic wrapper for Rust. [
](https://travis-ci.org/bjz/glfw-rs)
+ * [jeremyletang/rust-sfml](https://github.com/JeremyLetang/rust-sfml) SFML bindings for Rust [
](https://travis-ci.org/JeremyLetang/rust-sfml)
+ * [servo/rust-glut](https://github.com/mozilla-servo/rust-glut) GLUT bindings for Rust
+ * [SiegeLord/RustAllegro](https://github.com/SiegeLord/RustAllegro) A Rust wrapper and bindings of Allegro 5 game programming library [](https://travis-ci.org/SiegeLord/RustAllegro)
+* Game Engines
+ * [PistonDevelopers/piston](https://github.com/pistondevelopers/piston/) A user friendly game engine written in Rust
+ * [sebcrozet/kiss3d](https://github.com/sebcrozet/kiss3d) Keep it simple, stupid 3d graphics engine for Rust.
+* Collision Detection, Physics
+ * [bjz/bullet-rs](https://github.com/bjz/bullet-rs/) Bindings and wrapper for the Bullet physics C API
+ * [sebcrozet/ncollide](https://github.com/sebcrozet/ncollide) n-dimensional collision detection library in Rust.
+ * [sebcrozet/nphysics](https://github.com/sebcrozet/nphysics) 2 and 3-dimensional rigid body physics engine for Rust. [](https://travis-ci.org/sebcrozet/nphysics)
+
+## Games
+
+* [Arcterus/game-of-life](https://github.com/Arcterus/game-of-life)
+* [Arcterus/rust-snake](https://github.com/Arcterus/rust-snake)
+* [bachm/rusty-t*tris](https://github.com/bachm/rusty-tetris)
+* [bvssvni/rust-snake](https://github.com/bvssvni/rust-snake)
+* [Coeuvre/rust-2048](https://github.com/Coeuvre/rust-2048)
+* [Coeuvre/rust-pong](https://github.com/Coeuvre/rust-pong)
+* [dpc/rustyhex](https://github.com/dpc/rustyhex/) Simple roguelike written in Rust language
+* [FrozenCow/rust-airhockey](https://github.com/FrozenCow/rust-airhockey) A simple airhockey game using rust-sdl and OpenGL
+* [jeaye/q3](https://github.com/Jeaye/q3) A Quake 3 like game with voxelized destructible maps [
](https://travis-ci.org/jeaye/q3)
+* [mynery/xxo](https://github.com/mynery/xxo) Tic Tac Toe in rust with termbox
+* [ozkriff/marauder](https://github.com/ozkriff/marauder) Turn-based strategy game written in Rust using GLFW 3 and OpenGL [
](https://travis-ci.org/ozkriff/marauder)
+* [rlane/cubeland](https://github.com/rlane/cubeland) Infinite terrain with Rust and OpenGL
+* [zokier/pong-rs](https://github.com/zokier/pong-rs) Classic pong game
+
+## GUI
+* [kenz-gelsoft/wxRust](https://github.com/kenz-gelsoft/wxRust) — [wxWidgets](http://www.wxwidgets.org/) bindings. [
](https://travis-ci.org/kenz-gelsoft/wxRust)
+
+## Network programming
+* [zeromq/zmq.rs](https://github.com/zeromq/zmq.rs) — Rust implementation of the [ZeroMQ](http://zeromq.org/) protocol. [
](https://travis-ci.org/zeromq/zmq.rs)
+"""
+
+HEADER_STABLE = \
+"""
+# Awesome Rust
+
+A curated list of awesome Rust code and resources. Inspired by the other [awesome lists](https://github.com/bayandin/awesome-awesomeness).
+
+Only projects that are stable and useful to users are added. Projects that do not compile with Rust-nightly for a longer time are moved to `UNSTABLE.md`."""
+
+HEADER_UNSTABLE = \
+"""
+# Unstable
+
+A list of awesome but unstable/experimental Rust projects which some day hopefully will be migrated to `README.md`."""
+
+TOC = \
+"""
+- [Awesome Rust](#awesome-rust)
+ - [Code](#code)
+ - [Audio](#audio)
+ - [Build system](#build-system)
+ - [Command-line argument parsing](#command-line-argument-parsing)
+ - [Compression](#compression)
+ - [Computation](#computation)
+ - [Cryptography](#cryptography)
+ - [Database](#database)
+ - [Encoding](#encoding)
+ - [Game development](#game-development)
+ - [Games](#games)
+ - [GUI](#gui)
+ - [Network programming](#network-programming)
+ - [Template engine](#template-engine)
+ - [Testing](#testing)
+ - [Web programming](#web-programming)
+ - [Resources](#resources)
+"""
+
+def add( value, rows_stable=None, rows_unstable=None ):
+
+ if rows_stable:
+ rows_stable.append( value )
+ if rows_unstable:
+ rows_unstable.append( value )
+
+#end def add
+
+def entry( prefix, name, rows_stable=None, rows_unstable=None ):
+
+ entry = DATA.get(name)
+
+ if entry is None:
+ print '"%s" not found' % name
+ return
+
+ url = entry.get('url')
+ description = entry.get('descr', '')
+
+ if description:
+ description = ' ' + description
+
+ travis_badge = entry.get('travis_badge')
+ travis_url = entry.get('travis_url')
+
+ if travis_badge and travis_url:
+ travis = ' ' + md_link( '
' % travis_badge, travis_url )
+ else:
+ travis = ''
+
+ if description or travis:
+ separator = ' —'
+ else:
+ separator = ''
+
+ unstable = entry.get('unstable')
+
+ if unstable:
+ rows = rows_unstable
+ else:
+ rows = rows_stable
+
+ rows.append('%s[%s](%s)%s%s%s' % (prefix, name, url, separator, description, travis))
+
+#end def entry
+
+
+# Generate Markdown files.
+rows_stable = [HEADER_STABLE, TOC]
+rows_unstable = [HEADER_UNSTABLE, TOC]
+
+add( '## Code\n', rows_stable, rows_unstable )
+
+add( '\n### Audio\n', rows_stable, rows_unstable )
+entry( '* ', 'bjz/openal-rs', rows_stable, rows_unstable )
+entry( '* ', 'JeremyLetang/ears', rows_stable, rows_unstable )
+entry( '* ', 'JeremyLetang/rust-portaudio', rows_stable, rows_unstable )
+entry( '* ', 'musitdev/rust-portmidi', rows_stable, rows_unstable )
+
+add( '\n### Build system\n', rows_stable, rows_unstable )
+entry( '* ', 'Cargo', rows_stable, rows_unstable )
+add( '* CMake', rows_stable, rows_unstable )
+entry( ' * ', 'SiegeLord/RustCMake', rows_stable, rows_unstable )
+add( '* Make', rows_stable, rows_unstable )
+entry( ' * ', 'PistonDevelopers/rust-empty', rows_stable, rows_unstable )
+
+add( '\n### Command-line argument parsing\n', rows_stable, rows_unstable )
+entry( '* ', 'docopt/docopt.rs', rows_stable, rows_unstable )
+entry( '* ', 'wycats/hammer.rs', rows_stable, rows_unstable )
+
+add( '\n### Compression\n', rows_stable, rows_unstable )
+entry( '* ', 'lifthrasiir/rust-zip', rows_stable, rows_unstable )
+
+add( '\n### Computation\n', rows_stable, rows_unstable )
+entry( '* ', 'eholk/rust-opencl', rows_stable, rows_unstable )
+
+add( '\n### Cryptography\n', rows_stable, rows_unstable )
+entry( '* ', 'DaGenix/rust-crypto', rows_stable, rows_unstable )
+entry( '* ', 'dnaq/sodiumoxide', rows_stable, rows_unstable )
+entry( '* ', 'sfackler/rust-openssl', rows_stable, rows_unstable )
+
+add( '\n### Database\n', rows_stable, rows_unstable )
+add( '* SQL', rows_stable, rows_unstable )
+add( ' * MySql', rows_stable, rows_unstable )
+entry( ' * ', 'blackbeam/rust-mysql-simple', rows_stable, rows_unstable )
+add( ' * PostgreSql', rows_stable, rows_unstable )
+entry( ' * ', 'sfackler/rust-postgres', rows_stable, rows_unstable )
+add( ' * Sqlite', rows_stable, rows_unstable )
+entry( ' * ', 'linuxfood/rustsqlite', rows_stable, rows_unstable )
+
+add( '\n### Encoding\n', rows_stable, rows_unstable )
+add( '* Cap\'n Proto', rows_stable, rows_unstable )
+entry( ' * ', 'dwrensha/capnproto-rust', rows_stable, rows_unstable )
+add( '* Character Encoding', rows_stable, rows_unstable )
+entry( ' * ', 'lifthrasiir/rust-encoding', rows_stable, rows_unstable )
+add( '* CSV', rows_stable, rows_unstable )
+entry( ' * ', 'BurntSushi/rust-csv', rows_stable, rows_unstable )
+entry( ' * ', 'Geal/rust-csv', rows_stable, rows_unstable )
+add( '* MsgPck', rows_stable, rows_unstable )
+entry( ' * ', 'mneumann/rust-msgpack', rows_stable, rows_unstable )
+add( '* ProtocolBuffers', rows_stable, rows_unstable )
+entry( ' * ', 'stepancheg/rust-protobuf', rows_stable, rows_unstable )
+add( '* TOML', rows_stable, rows_unstable )
+entry( ' * ', 'alexcrichton/toml-rs', rows_stable, rows_unstable )
+add( '* Tnetstring', rows_stable, rows_unstable )
+entry( ' * ', 'erickt/rust-tnetstring', rows_stable, rows_unstable )
+add( '* XML', rows_stable, rows_unstable )
+entry( ' * ', 'bjz/sax-rs', rows_stable, rows_unstable )
+entry( ' * ', 'DanielFath/xml-parser', rows_stable, rows_unstable )
+entry( ' * ', 'Florob/RustyXML', rows_stable, rows_unstable )
+entry( ' * ', 'netvl/rust-xml', rows_stable, rows_unstable )
+
+add( '\n### Game development\n', rows_stable, rows_unstable )
+entry( '* ', 'JeremyLetang/rustenstein3D', rows_stable, rows_unstable )
+
+add( '\n### Games\n', rows_stable, rows_unstable )
+entry( '* ', 'lifthrasiir/angolmois-rust', rows_stable, rows_unstable )
+
+add( '\n### GUI\n', rows_stable, rows_unstable )
+add( '* Cocoa', rows_stable, rows_unstable )
+entry( ' * ', 'mozilla-servo/rust-cocoa', rows_stable, rows_unstable )
+add( '* Gtk+', rows_stable, rows_unstable )
+entry( ' * ', 'JeremyLetang/rgtk', rows_stable, rows_unstable )
+add( '* ncurses', rows_stable, rows_unstable )
+entry( ' * ', 'jeaye/ncurses-rs', rows_stable, rows_unstable )
+add( '* SDL', rows_stable, rows_unstable )
+entry( ' * ', 'AngryLawyer/rust-sdl2', rows_stable, rows_unstable )
+entry( ' * ', 'brson/rust-sdl', rows_stable, rows_unstable )
+add( '* Termbox', rows_stable, rows_unstable )
+entry( ' * ', 'gchp/rustbox', rows_stable, rows_unstable )
+
+add( '\n### Network programming\n', rows_stable, rows_unstable )
+add( '* ZeroMQ', rows_stable, rows_unstable )
+entry( ' * ', 'erickt/rust-zmq', rows_stable, rows_unstable )
+
+add( '\n### Template engine\n', rows_stable, rows_unstable )
+add( '* Mustache', rows_stable, rows_unstable )
+entry( ' * ', 'erickt/rust-mustache', rows_stable, rows_unstable )
+
+add( '\n### Testing\n', rows_stable, rows_unstable )
+entry( '* ', 'BurntSushi/quickcheck', rows_stable, rows_unstable )
+entry( '* ', 'farcaller/shiny', rows_stable, rows_unstable )
+
+add( '\n### Web programming\n', rows_stable, rows_unstable )
+add( 'See also ' + md_link('http://arewewebyet.com/', 'http://arewewebyet.com/') + '\n', rows_stable, rows_unstable )
+add( '* Core', rows_stable, rows_unstable )
+entry( ' * ', 'chris-morgan/rust-http', rows_stable, rows_unstable )
+entry( ' * ', 'hyperium/hyper', rows_stable, rows_unstable )
+add( '* Client', rows_stable, rows_unstable )
+entry( ' * ', 'carllerche/curl-rust', rows_stable, rows_unstable )
+entry( ' * ', 'vhbit/curl-rs', rows_stable, rows_unstable )
+add( '* Server', rows_stable, rows_unstable )
+entry( ' * ', 'erickt/rust-mongrel2', rows_stable, rows_unstable )
+entry( ' * ', 'Iron', rows_stable, rows_unstable )
+entry( ' * ', 'Nickel', rows_stable, rows_unstable )
+
+add( '\n## Resources\n', rows_stable, rows_unstable )
+entry( '* ', 'Rust by Example', rows_stable, rows_unstable )
+entry( '* ', 'Rust CI', rows_stable, rows_unstable )
+entry( '* ', 'Rust Guidelines', rows_stable, rows_unstable )
+
+markdown_stable = '\n'.join(rows_stable)
+markdown_unstable = '\n'.join(rows_unstable )
+
+#print markdown_unstable
+
+with open( 'README.md', 'wb' ) as f:
+ f.write( markdown_stable )