PageRenderTime 49ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/ServiceStack/src/ServiceStack.Interfaces/IntlAttribute.cs

https://github.com/ServiceStack/ServiceStack
C# | 216 lines | 172 code | 17 blank | 27 comment | 6 complexity | cc5d7c9aae3effe20e8a611632eef7a5 MD5 | raw file
  1. using System;
  2. using System.Reflection;
  3. namespace ServiceStack;
  4. /// <summary>
  5. /// Configure result field to use JavaScript's Intl.NumberFormat formatter
  6. /// </summary>
  7. public class IntlNumber : Intl
  8. {
  9. public IntlNumber() : base(IntlFormat.Number) {}
  10. public IntlNumber(NumberStyle style) : base(IntlFormat.Number)
  11. {
  12. Number = style;
  13. }
  14. public override bool ShouldInclude(PropertyInfo pi, string value) => pi.Name != nameof(Type) && base.ShouldInclude(pi, value);
  15. }
  16. /// <summary>
  17. /// Configure result field to use JavaScript's Intl.DateTimeFormat formatter
  18. /// </summary>
  19. public class IntlDateTime : Intl
  20. {
  21. public IntlDateTime() : base(IntlFormat.DateTime) {}
  22. public IntlDateTime(DateStyle date, TimeStyle time = TimeStyle.Undefined) : base(IntlFormat.DateTime)
  23. {
  24. Date = date;
  25. Time = time;
  26. }
  27. public override bool ShouldInclude(PropertyInfo pi, string value) => pi.Name != nameof(Type) && base.ShouldInclude(pi, value);
  28. }
  29. /// <summary>
  30. /// Configure result field to use JavaScript's Intl.RelativeTimeFormat formatter
  31. /// </summary>
  32. public class IntlRelativeTime : Intl
  33. {
  34. public IntlRelativeTime() : base(IntlFormat.RelativeTime) {}
  35. public IntlRelativeTime(Numeric numeric) : base(IntlFormat.RelativeTime)
  36. {
  37. Numeric = numeric;
  38. }
  39. public override bool ShouldInclude(PropertyInfo pi, string value) => pi.Name != nameof(Type) && base.ShouldInclude(pi, value);
  40. }
  41. /// <summary>
  42. /// Configure result field to use a JavaScript Intl formatter
  43. /// </summary>
  44. [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
  45. public class Intl : MetadataAttributeBase
  46. {
  47. public Intl() {}
  48. public Intl(IntlFormat type) => Type = type;
  49. public IntlFormat Type { get; set; }
  50. public string Locale { get; set; }
  51. public string Options { get; set; }
  52. public DateStyle Date { get; set; }
  53. public TimeStyle Time { get; set; }
  54. public NumberStyle Number { get; set; }
  55. public RelativeTimeStyle RelativeTime { get; set; }
  56. public Numeric Numeric { get; set; }
  57. /// <summary>
  58. /// Use <see cref="NumberCurrency"/> for typed values
  59. /// </summary>
  60. public string Currency { get; set; }
  61. public CurrencyDisplay CurrencyDisplay { get; set; }
  62. public CurrencySign CurrencySign { get; set; }
  63. public SignDisplay SignDisplay { get; set; }
  64. public RoundingMode RoundingMode { get; set; }
  65. /// <summary>
  66. /// Use <see cref="NumberUnit"/> for typed values
  67. /// </summary>
  68. public string Unit { get; set; }
  69. public UnitDisplay UnitDisplay { get; set; }
  70. public Notation Notation { get; set; }
  71. public int MinimumIntegerDigits { get; set; } = int.MinValue;
  72. public int MinimumFractionDigits { get; set; } = int.MinValue;
  73. public int MaximumFractionDigits { get; set; } = int.MinValue;
  74. public int MinimumSignificantDigits { get; set; } = int.MinValue;
  75. public int MaximumSignificantDigits { get; set; } = int.MinValue;
  76. public int FractionalSecondDigits { get; set; } = int.MinValue;
  77. public DateText Weekday { get; set; }
  78. public DateText Era { get; set; }
  79. public DatePart Year { get; set; }
  80. public DateMonth Month { get; set; }
  81. public DatePart Day { get; set; }
  82. public DatePart Hour { get; set; }
  83. public DatePart Minute { get; set; }
  84. public DatePart Second { get; set; }
  85. public DateText TimeZoneName { get; set; }
  86. public string TimeZone { get; set; }
  87. public bool Hour12 { get; set; }
  88. }
  89. public enum IntlFormat
  90. {
  91. /// <summary>
  92. /// Intl.NumberFormat
  93. /// </summary>
  94. Number,
  95. /// <summary>
  96. /// Intl.DateTimeFormat
  97. /// </summary>
  98. DateTime,
  99. /// <summary>
  100. /// Intl.RelativeTimeFormat
  101. /// </summary>
  102. RelativeTime,
  103. }
  104. public enum DateStyle { Undefined=0, Full, Long, Medium, Short, }
  105. public enum TimeStyle { Undefined=0, Full, Long, Medium, Short, }
  106. public enum NumberStyle { Undefined=0, Decimal, Currency, Percent, Unit, }
  107. public enum RelativeTimeStyle { Undefined=0, Long, Short, Narrow, }
  108. public enum Numeric { Undefined=0, Always, Auto, }
  109. public enum DatePart { Undefined=0, Numeric, Digits2, }
  110. public enum DateMonth { Undefined=0, Numeric, Digits2, Narrow, Short, Long, }
  111. public enum DateText { Undefined=0, Narrow, Short, Long }
  112. public enum UnitDisplay { Undefined=0, Long, Short, Narrow }
  113. public enum Notation { Undefined=0, Standard, Scientific, Engineering, Compact, }
  114. public enum CurrencyDisplay { Undefined=0, Symbol, NarrowSymbol, Code, Name, }
  115. public enum CurrencySign { Undefined=0, Accounting, Standard, }
  116. public enum SignDisplay { Undefined=0, Always, Auto, ExceptZero, Negative, Never, }
  117. public enum RoundingMode { Undefined=0, Ceil, Floor, Expand, Trunc, HalfCeil, HalfFloor, HalfExpand, HalfTrunc, HalfEven, }
  118. public static class NumberCurrency
  119. {
  120. public const string USD = nameof(USD);
  121. public const string EUR = nameof(EUR);
  122. public const string JPY = nameof(JPY);
  123. public const string GBP = nameof(GBP);
  124. public const string CHF = nameof(CHF);
  125. public const string CAD = nameof(CAD);
  126. public const string AUD = nameof(AUD);
  127. public const string ZAR = nameof(ZAR);
  128. public const string CNY = nameof(CNY);
  129. public const string HKD = nameof(HKD);
  130. public const string NZD = nameof(NZD);
  131. public const string SEK = nameof(SEK);
  132. public const string KRW = nameof(KRW);
  133. public const string SGD = nameof(SGD);
  134. public const string NOK = nameof(NOK);
  135. public const string MXN = nameof(MXN);
  136. public const string INR = nameof(INR);
  137. public const string RUB = nameof(RUB);
  138. public const string TRY = nameof(TRY);
  139. public const string BRL = nameof(BRL);
  140. public const string TWD = nameof(TWD);
  141. public const string DKK = nameof(DKK);
  142. public const string PLN = nameof(PLN);
  143. public const string THB = nameof(THB);
  144. public const string IDR = nameof(IDR);
  145. public const string HUF = nameof(HUF);
  146. public const string CZK = nameof(CZK);
  147. public const string ILS = nameof(ILS);
  148. public const string CLP = nameof(CLP);
  149. public const string PHP = nameof(PHP);
  150. public const string AED = nameof(AED);
  151. public const string COP = nameof(COP);
  152. public const string SAR = nameof(SAR);
  153. public const string MYR = nameof(MYR);
  154. public const string RON = nameof(RON);
  155. }
  156. public static class NumberUnit
  157. {
  158. public const string Acre = "acre";
  159. public const string Bit = "bit";
  160. public const string Byte = "byte";
  161. public const string Celsius = "celsius";
  162. public const string Centimeter = "centimeter";
  163. public const string Day = "day";
  164. public const string Degree = "degree";
  165. public const string Fahrenheit = "fahrenheit";
  166. public const string Foot = "foot";
  167. public const string Gallon = "gallon";
  168. public const string Gigabit = "gigabit";
  169. public const string Gigabyte = "gigabyte";
  170. public const string Gram = "gram";
  171. public const string Hectare = "hectare";
  172. public const string Hour = "hour";
  173. public const string Inch = "inch";
  174. public const string Kilobit = "kilobit";
  175. public const string Kilobyte = "kilobyte";
  176. public const string Kilogram = "kilogram";
  177. public const string Kilometer = "kilometer";
  178. public const string Liter = "liter";
  179. public const string Megabit = "megabit";
  180. public const string Megabyte = "megabyte";
  181. public const string Meter = "meter";
  182. public const string Mile = "mile";
  183. public const string Milliliter = "milliliter";
  184. public const string Millimeter = "millimeter";
  185. public const string Millisecond = "millisecond";
  186. public const string Minute = "minute";
  187. public const string Month = "month";
  188. public const string Ounce = "ounce";
  189. public const string Percent = "percent";
  190. public const string Petabyte = "petabyte";
  191. public const string Pound = "pound";
  192. public const string Second = "second";
  193. public const string Stone = "stone";
  194. public const string Terabit = "terabit";
  195. public const string Terabyte = "terabyte";
  196. public const string Week = "week";
  197. public const string Yard = "yard";
  198. public const string Year = "year";
  199. }