dftp 0.1.0

dft instructions parser
Documentation
use nom::error::VerboseError;
use nom::IResult;

pub type Program = Vec<Statement>;

#[derive(Debug, PartialEq)]
pub struct Statement {
    pub directive_component: DirectiveComponent,
    pub connector_components: ConnectorComponentList,
}

#[derive(Debug, PartialEq)]
pub struct DirectiveComponent {
    pub directive: Directive,
    pub fields: FieldList,
}

#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Directive {
    SET,
    ADD,
    ALIAS,
    MERGE,
    IGNORE,
    RENAME,
    FILTER,
    COERCE,
    DISTINCT,
    VALIDATE,
}

pub type FieldList = Vec<Field>;

pub type Field = String;

pub type ConnectorComponentList = Vec<ConnectorComponent>;

#[derive(Debug, PartialEq)]
pub struct ConnectorComponent {
    pub connector: Connector,
    pub target: TargetComponent,
}

#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Connector {
    OR,
    TO,
    TYPED,
    RESCUE,
    DEFAULT,
    MATCHING,
}

#[derive(Debug, PartialEq)]
pub enum TargetComponent {
    DataValue(DataValue),
    DataType(DataType),
    Format(Format),
    Action(Action),
    Expression(Expression),
}

#[derive(Debug, PartialEq)]
pub enum DataValue {
    Float(Float),
    Text(Text),
    Boolean(Boolean),
    Integer(Integer),
}

pub type Float = f64;
pub type Text = String;
pub type Boolean = bool;
pub type Integer = isize;

#[derive(Debug, PartialEq, Eq, Clone)]
pub enum DataType {
    FLOAT,
    STRING,
    INTEGER,
    BOOLEAN,
}

#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Format {
    URI,
    UUID,
    DATE,
    TIME,
    EMAIL,
    DATETIME,
}

#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Action {
    HALT,
    NOTIFY,
    DISCARD,
}

#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Expression {
    EQUALS,
    LESSER,
    DIFFERS,
    GREATER,
    EQLESSER,
    EQGREATER,
}

pub type VResult<I, O> = IResult<I, O, VerboseError<I>>;