///|
pub(all) enum VarDataType {
  IntVar(String)
  IntegerVar(String)
  DoubleVar(String)
  // FloatVar(Float)
  StringVar(String)
  FalseVar
  TrueVar
  // UIntVar(UInt)
  DecimalVar(Decimal)
  DateVar(String)
  TimeVar(String)
  DateTimeVar(String)
  DurationVar(String)
} derive(Debug, Eq, Hash)

///|
pub impl Show for VarDataType with fn output(
  self : VarDataType,
  logger : &Logger,
) -> Unit {
  match self {
    IntVar(i) => logger.write(i)
    IntegerVar(i) => logger.write(i)
    DoubleVar(d) => logger.write(d)
    DecimalVar(d) => logger.write(d) // 假设 Decimal (StringView) 可直接写入或需转换
    StringVar(s) => logger.write(s)
    TrueVar => logger.write("true")
    FalseVar => logger.write("false")
    DateVar(v) => logger.write(v)
    TimeVar(v) => logger.write(v)
    DateTimeVar(v) => logger.write(v)
    DurationVar(v) => logger.write(v)
  }
}

///|
fn VarDataType::into_value(self : VarDataType) -> String {
  match self {
    IntVar(value) => value
    IntegerVar(value) => value
    DoubleVar(value) => value
    DecimalVar(value) => value.to_owned()
    StringVar(value) => value
    TrueVar => "true"
    FalseVar => "false"
    DateVar(value) => value
    TimeVar(value) => value
    DateTimeVar(value) => value
    DurationVar(value) => value
  }
}