macro package CJson.jsonmacro

import std.ast.*

/*
* Macro for custom json var name mapping
* @param attr_Tk the given name for mapping
* @param input_Tk the target var
* @return token the expaned token representation
*/
public macro JsonName(attr_Tk: Tokens, input_Tk: Tokens): Tokens {
    var decl = TokenVerifier.verifyVarDecl(input_Tk, Const.JSON_NAME_MARCO_NAME)
    
    globalConfig.userDefinedVarMap.put(decl.identifier.value, checkVarNameAttr(attr_Tk))
    
    return input_Tk
}

func checkVarNameAttr(attr_Tk: Tokens): String {
    var token = attr_Tk[0]
    if (token.kind == STRING_LITERAL) {
        return token.value
    } else {
        throw MacroParameterException("JsonAttribute requies a string parameter at position 0, find ${token.kind} instead") 
    }
    
}