macro package CJson.jsonmacro

import std.ast.*

/*
* Processor for decorated class
*/
open class ClassProcessor {
    protected var globalConfig: GlobalConfig

    public init(globalConfig: GlobalConfig) {
        this.globalConfig = globalConfig
    }

    /*
    * Gets information from var token
    * @param vark_Tk the var token to get information from
    * @return (Token, String, String) the identifier, name, type name of the var
    */
    protected func getVarInfo(vark_Tk: VarDecl): VarInfo {
        return vark_Tk.getVarInfo()
    }

    /*
    * Gets mapped name for given var name from user defined name mapping by @JsonName macro
    * @param varName to get mapped name for
    * @return String the mapped name 
    */
    protected func getMappedName(varName: String): String {
        var mappedNameValue = varName
        if (globalConfig.userDefinedVarMap.contains(varName)) {
            mappedNameValue = globalConfig.userDefinedVarMap.get(varName).getOrThrow()
        }
        
        return mappedNameValue
    }
}