de6d4644创建于 2024年11月4日历史提交
/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2022-2024. All rights reserved.
 */
package jwt4cj

public let NULL_NODE: JsonValue = JsonNull()
public let MISSING_CLAIM = JsonNodeClaim()

func createClaim(data: JsonValue): Claim {
    JsonNodeClaim(data)
}

/*
 * 使用std.json实现的claim
 */
public class JsonNodeClaim <: Claim {
    private let data: JsonValue
    private var missing = false

    protected init() {
        this.data = NULL_NODE
        this.missing = true
    }

    public init(data: JsonValue) {
        this.data = data
    }

    public func isNull(): Bool {
        !isMissing() && data.kind() == JsonKind.JsNull
    }

    public func isMissing(): Bool {
        missing
    }

    public func asBool(): Bool {
        data.asBool().getValue()
    }

    public func asInt(): Int64 {
        data.asInt().getValue()
    }

    public func asFloat(): Float64 {
        data.asFloat().getValue()
    }

    public func asString(): String {
        data.asString().getValue()
    }

    public func asTime(): DateTime {
        DateTime.ofEpoch(second: data.asInt().getValue(), nanosecond: 0)
    }

    public func asArray(): Array<JsonValue> {
        asList().toArray()
    }

    public func asList(): ArrayList<JsonValue> {
        data.asArray().getItems()
    }

    public func asMap(): Map<String, JsonValue> {
        data.asObject().getFields()
    }

    public func getValue(): JsonValue {
        return data
    }

    public func toString(): String {
        if (missing) {
            throw MissingClaimException()
        } else {
            data.toStr()
        }
    }
}