packages feed

harmony-0.1.0.1: README.md

# Harmony [![Hackage version](https://img.shields.io/hackage/v/harmony.svg?style=flat)](https://hackage.haskell.org/package/harmony) [![Build Status](https://secure.travis-ci.org/SantiMunin/harmony.svg?branch=master)](http://travis-ci.org/SantiMunin/harmony)
Harmony is a web service specification compiler that generates implementation (server and client) and tests.

## Targets supported

+ Server
  * Node.js (`-sjs`)
+ Client (and [Hypothesis](https://github.com/DRMacIver/hypothesis) based tests)
  + Python (`-cpython`)

## Installation

+ From Hackage: `cabal install harmony`
+ From source code: `git clone https://www.github.com/SantiMunin/harmony && cd harmony && cabal install`

## Usage

After installing the package (`cabal install`), you will get the `harmony` executable. Afterwards:

    Usage: harmony [OPTION...] input_file
      -c[CLIENTS]     --client[=CLIENTS]         Desired output for the client
      -s[SERVERS]     --server[=SERVERS]         Desired output for the server
      -o[OUTPUT_DIR]  --output_dir[=OUTPUT_DIR]  Output path

Check the [Targets supported](#targets-supported) section to figure out the code related to each target. Also, refer to the [wiki](https://github.com/SantiMunin/harmony/wiki) for more information.

## Syntax

The input file should follow the syntax specified in `language_spec/Language.cf`. Example:

    service_name: HouseworkService
    service_version: 1.0.0

    enum Color { RED, BLUE, BLACK }

    struct Task {
       // Primary key
       @PK
       name : String,
       color : Color
    }

    struct Person {
      name: String,
      age: Int,
      tasks: [Task]
    }

    resource Person ("/person")

## Contributing

See the [wiki](https://github.com/SantiMunin/harmony/wiki).