Added license, README and other minor things #1
1 changed files with 41 additions and 4 deletions
45
README.md
45
README.md
|
@ -2,19 +2,56 @@
|
|||
|
||||
**S**td
|
||||
|
||||
|
||||
**I**/o
|
||||
|
||||
|
||||
**N**egotiator
|
||||
|
||||
|
||||
**G**enerator
|
||||
|
||||
## What is sing meant to be?
|
||||
|
||||
This crate is meant to create interfaces between traits in Rust libraries and the command line.
|
||||
It does this by providing two macros: …
|
||||
It does this by providing two macros:
|
||||
|
||||
- `sing_add_trait`, which acts as an attribute to a trait implementation and gathers the method signatures that are used by `sing_loop!`.
|
||||
- `sing_loop!`, which takes a trait object and serialization/deserialization functions as well as some optional parameters. It generates a loop parsing function calls coming from STDIN (or any other `BufRead` stream), evaluating them by calling the appropriate method on the object and returning them on STDOUT (or any other `Write` stream).
|
||||
|
||||
## Example usage
|
||||
|
||||
```rust
|
||||
use serde::{Serialize, Deserialize};
|
||||
use sing::{sing_add_trait, sing_loop};
|
||||
|
||||
trait FruitTree {
|
||||
fn shake(&self, shakes: u32) -> Vec<Fruit>;
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct Fruit {
|
||||
fruit_type: String,
|
||||
}
|
||||
|
||||
struct BananaTree;
|
||||
|
||||
#[sing_add_trait()]
|
||||
impl FruitTree for BananaTree {
|
||||
fn shake(&self, shakes: u32) -> Vec<Fruit>{
|
||||
let mut out = vec!();
|
||||
|
||||
for _ in 0..shakes {
|
||||
out.push(Fruit{fruit_type: String::from("Banana")});
|
||||
}
|
||||
|
||||
out
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let tree = BananaTree {};
|
||||
|
||||
sing_loop!(tree, [different, ron::to_string, ron::from_str],);
|
||||
}
|
||||
```
|
||||
|
||||
## Negotiator? Really?
|
||||
|
||||
|
|
Loading…
Reference in a new issue