// claims.mbt — token 型与声明集(定型载荷)

///|
/// token 型:access(业务门)/ refresh(换发门)。
pub(all) enum TokenType {
  Access
  Refresh
} derive(Eq, Debug)

///|
/// 线形名(JSON typ 字段取值)。
pub fn TokenType::wire(self : TokenType) -> String {
  match self {
    TokenType::Access => "access"
    TokenType::Refresh => "refresh"
  }
}

///|
/// 线形名反解(未知值 None)。
pub fn TokenType::of_wire(w : String) -> TokenType? {
  if w == "access" {
    Some(TokenType::Access)
  } else if w == "refresh" {
    Some(TokenType::Refresh)
  } else {
    None
  }
}

///|
/// 声明集:token 载荷定型字段。iat/exp 单位毫秒;时间全参数注入,
/// 核心零时钟读(D-G2)。
pub(all) struct Claims {
  sub : String
  iss : String
  aud : String
  iat : Int64
  exp : Int64
  typ : TokenType
  jti : String
} derive(Eq, Debug)