module hipddf.types;

import hipddf.parser:
    parserVarType,
    parserVarValue,
    parserVarSymbol,
    parserIsVarArray,
    parserVarLength,
    parserObjSymbol,
    parserObjHasVar,
    parserObjGet;


struct _HipDDFVar
{
    string type() const {return parserVarType(cast(void*)&this);}
    string value() const {return parserVarValue(cast(void*)&this);}
    string symbol() const {return parserVarSymbol(cast(void*)&this);}
    bool isArray() const {return parserIsVarArray(cast(void*)&this);}
    uint length() const {return parserVarLength(cast(void*)&this);}
    string toString() const {return type~" "~symbol~" = "~value;}
}
alias HipDDFVar = _HipDDFVar*;


struct _HipDDFObject
{
    string symbol() const {return parserObjSymbol(cast(void*)&this);}
    bool hasVar(string name) const {return parserObjHasVar(cast(void*)&this, name);}
    T get(T)(string name) const {return parserObjGet!T(cast(void*)&this, name);}
}
alias HipDDFObject = _HipDDFObject*;