using System;

namespace OfficeOpenXml.FormulaParsing.Utilities;

public static class ExtensionMethods {
  public static void IsNotNullOrEmpty(this ArgumentInfo<string> val) {
    if (string.IsNullOrEmpty(val.Value)) {
      throw new ArgumentException(val.Name + " cannot be null or empty");
    }
  }

  public static void IsNotNull<T>(this ArgumentInfo<T> val)
      where T : class {
    if (val.Value == null) {
      throw new ArgumentNullException(val.Name);
    }
  }

  public static bool IsNumeric(this object obj) {
    if (obj == null) {
      return false;
    }
    return (obj.GetType().IsPrimitive
            || obj is double
            || obj is decimal
            || obj is DateTime
            || obj is TimeSpan);
  }
}
