b315eb18创建于 2025年11月10日历史提交
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2024-2025. All rights reserved.
 */
macro package cjjson.macros

import std.collection.*

// 用于记录当前正在进行宏展开的 class/struct/enum 类型的成员列表的嵌套宏信息。
class GlobalInfo {
    private static var instance = GlobalInfo()

    private let jsonIgnoreSet = HashSet<String>() // 使用了 @JsonIgnore 的字段列表
    private let jsonIgnoreNullSet = HashSet<String>() // 使用了 @JsonIgnoreNull 的字段列表
    private let jsonNameMap = HashMap<String, String>() // 使用了 @JsonName 的哈希表(key是类的字段名称,value是json字符串里的字段名称)
    private let jsonDefaulteSet = HashSet<String>() // 使用了 @JsonDefault 的字段列表

    private init() {
    }

    public static func current(): GlobalInfo {
        return instance
    }

    public func reset(): Unit {
        jsonIgnoreSet.clear()
        jsonIgnoreNullSet.clear()
        jsonNameMap.clear()
        jsonDefaulteSet.clear()
    }

    public func setJsonIgnore(fieldName: String): Unit {
        jsonIgnoreSet.add(fieldName)
    }

    public func isJsonIgnore(fieldName: String): Bool {
        return jsonIgnoreSet.contains(fieldName)
    }

    public func setJsonIgnoreNull(fieldName: String): Unit {
        jsonIgnoreNullSet.add(fieldName)
    }

    public func isJsonIgnoreNull(fieldName: String): Bool {
        return jsonIgnoreNullSet.contains(fieldName)
    }

    public func setJsonName(fieldName: String, jsonName: String): Unit {
        jsonNameMap.add(fieldName, jsonName)
    }

    public func getJsonName(fieldName: String): ?String {
        return jsonNameMap.get(fieldName)
    }

    public func setJsonDefault(fieldName: String): Unit {
        jsonDefaulteSet.add(fieldName)
    }

    public func isJsonDefault(fieldName: String): Bool {
        return jsonDefaulteSet.contains(fieldName)
    }
}