https://github.com/skade/lazers
A couchdb client in Rust
https://github.com/skade/lazers
Last synced: 21 days ago
JSON representation
A couchdb client in Rust
- Host: GitHub
- URL: https://github.com/skade/lazers
- Owner: skade
- License: mpl-2.0
- Created: 2016-07-19T17:46:42.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-09-11T13:45:39.000Z (over 7 years ago)
- Last Synced: 2025-04-10T09:16:27.487Z (21 days ago)
- Language: Rust
- Homepage: http://laze.rs
- Size: 140 KB
- Stars: 18
- Watchers: 4
- Forks: 3
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - skade/lazers - A couchdb client in Rust (Rust)
README
# Laze RS
What could become a CouchDB toolkit in Rust.
Uses literate programming through [tango](https://github.com/pnkfelix/tango) and tries hard to build nice APIs.
[It is pronouced "Laze RS"](https://en.wiktionary.org/wiki/laze).
See [CONTRIBUTING](http://laze.rs/contributing.html) for a contribution guide.
## Project state
This is currently mostly API experiments. I'm searching for help
with many of them.Contributors welcome!
Find a list of issues [here](https://github.com/skade/lazers/issues).
## Notable specialties
### Use of Tango
Tango is used to provide richer documentation by using literate programming to make writing descriptions the default.
### Documentation-driven development
Features, as experimental as they may be, should never be committed without extensive documentation.
This hasn't been followed through in the past and has been fixed, but there might be spots. These spots shouldn't happen again.
### Use of decorated results
Decorated results allow a form of result chaining that hides error handling until the very last step.
See [yakshav.es/decorating-results/](http://yakshav.es/decorating-results/) about how decorated results work.
## Current Setup
The project currently consists of the following crates:
* [lazers-traits](http://laze.rs/lazers-traits/src/lib/): A set of traits without implementations that describe the general interface towards a CouchDB(-like) database. It defines error and result types and interactions for writing and reading documents.
* [lazers-hyper-client](http://laze.rs/lazers-hyper-client/src/lib/): A client implementing lazers-traits for a remote CouchDB using hyper. Currently also serves as an implementation example for the interface described in lazers-traits.
* [lazers-changes-stream](http://laze.rs/lazers-changes-stream/src/lib/): An implementation of the CouchDB changes stream protocol. It is generic over any `Read` interface, so it depends on no http client.
* [lazers-replicator](http://laze.rs/lazers-replicator/src/lib/): A (currently unfinished) implementation of the CouchDB replication protocol. Important features of the base libraries were missing, but it is still around as a placeholder or as a way to start.
* [lazers-liblazers](http://laze.rs/lazers-liblazers/src/lib/): A C interface to the library. Still figuring a good way to do this. This interface is important, see [Long-Term Goals]
## Notably missing
* A second implementation of the lazers-traits interface for a local database
* A good way to compile the md source documents into a doc site
* A switch to tokio/futures-rs. I think this is the... future, so at some point the whole interface would need to be switched over.## Long-term goals
* Provide a way to use Laze RS on iOS and Android similar to CouchBase lite.
* Provide bindings towards several programming languages like Ruby/Python## Constraints
The library itself uses plain Serde for serialisation and deserialisation, this means some boilerplate work is required.
## Credits
Hat tip to https://lobste.rs/u/gsquire for the final name idea.