nginx-config 0.13.2

A parser, AST and formatter for nginx configuration files.
Documentation
use combine::{many1, Parser};
use combine::{choice};

use ast::{Item};
use grammar::bool;
use helpers::{semi, ident};
use tokenizer::TokenStream;

pub fn gzip_static<'a>() -> impl Parser<Output=Item, Input=TokenStream<'a>> {
    use ast::GzipStatic::*;
    ident("gzip_static").with(choice((
        ident("on").map(|_| On),
        ident("off").map(|_| Off),
        ident("always").map(|_| Always),
    )))
    .map(Item::GzipStatic)
    .skip(semi())
}

pub fn gzip_proxied<'a>() -> impl Parser<Output=Item, Input=TokenStream<'a>> {
    use ast::GzipProxied::*;
    ident("gzip_proxied").with(many1(choice((
        ident("off").map(|_| Off),
        ident("expired").map(|_| Expired),
        ident("no-cache").map(|_| NoCache),
        ident("no-store").map(|_| NoStore),
        ident("private").map(|_| Private),
        ident("no_last_modified").map(|_| NoLastModified),
        ident("no_etag").map(|_| NoEtag),
        ident("auth").map(|_| Auth),
        ident("any").map(|_| Any),
    ))))
    .map(Item::GzipProxied)
    .skip(semi())
}

pub fn directives<'a>() -> impl Parser<Output=Item, Input=TokenStream<'a>> {
    choice((
        ident("gzip").with(bool()).skip(semi())
            .map(Item::Gzip),
        gzip_static(),
        gzip_proxied(),
    ))
}