zamm_yang 0.0.4

A basic, experimental code generator
# yang 陽


[![Build Status](https://travis-ci.com/amosjyng/yang.svg?branch=main)](https://travis-ci.com/amosjyng/yang)

Yang is a rudimentary, experimental code generator. Yang is both used by, and depends on, [Yin](https://crates.io/crates/zamm_yin) for code generation.

This crate is named `zamm_yang` for consistency with `zamm_yin`. However, the name for this tool is just `yang` for all intents and purposes within the ZAMM universe.

## Install


```sh
cargo install yang
```

## Usage


### As a binary


```text
yang 0.0.4
Amos Ng <me@amos.ng>
Code generator for Yin.

USAGE:
    yang <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    clean       Clean up autogenerated files.
    generate    Generate a new concept code file
    help        Prints this message or the help of the given subcommand(s)
```

#### Example


See this project's very own [`yin.md`](yin.md) for an example configuration file.

Then, run

```sh
yang generate
```

and you can use the newly generated `src/concepts/attributes/target.rs` as in the [example](examples/result/main.rs). Make sure to initialize the new `Target` concept on KB startup

### As a library


If you're using a custom build script, chances are you will want to generate Yin concept files for your project directly rather than passing comamndline options to the `yang` binary. For example, to automatically generate the example file above at build time, first add `yin` and `yang` as build dependencies:

```toml
[build-dependencies]
zamm_yin = "0.0.4"
zamm_yang = "0.0.4"
```

Then, define your `build.rs` as in the [example](examples/build.rs), and your `main.rs` in the same way as above.

## Development


Note that due to Yang using its autogeneration capabilities on itself, it requires a pre-existing binary of itself in order to build its current version. The `build.rs` script will attempt to download one from Bintray if it isn't found locally. If none of the versions of Bintray are available for your platform, you can bootstrap Yang by building each version consecutively and setting the `YANG_BINARY` environment variable to the location of the newly built `yang` executable.