table.sbn 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using Newtonsoft.Json.Linq;
  2. using Luban;
  3. {{
  4. key_type = __table.key_ttype
  5. value_type = __table.value_ttype
  6. func index_type_name
  7. ret (declaring_type_name $0.type)
  8. end
  9. func table_union_map_type_name
  10. ret 'System.Collections.Generic.Dictionary<(' + (array.each __table.index_list @index_type_name | array.join ', ') + '), ' + (declaring_type_name __value_type) + '>'
  11. end
  12. func table_key_list
  13. varName = $0
  14. indexList = __table.index_list |array.each do; ret varName + '.' + (format_property_name __code_style $0.index_field.name); end;
  15. ret array.join indexList ', '
  16. end
  17. func table_param_def_list
  18. paramList = __table.index_list |array.each do; ret (declaring_type_name $0.type) + ' ' + $0.index_field.name; end
  19. ret array.join paramList ', '
  20. end
  21. func table_param_name_list
  22. paramList = __table.index_list |array.each do; ret $0.index_field.name; end
  23. ret array.join paramList ', '
  24. end
  25. }}
  26. {{namespace_with_grace_begin __namespace_with_top_module}}
  27. {{~if __table.comment != '' ~}}
  28. /// <summary>
  29. /// {{escape_comment __table.comment}}
  30. /// </summary>
  31. {{~end~}}
  32. public partial class {{__name}}
  33. {
  34. {{~if __table.is_map_table ~}}
  35. private readonly System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> _dataMap;
  36. private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
  37. public {{__name}}(JArray _buf)
  38. {
  39. _dataMap = new System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}>(_buf.Count);
  40. _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(_buf.Count);
  41. foreach(JObject _ele in _buf)
  42. {
  43. {{declaring_type_name __value_type}} _v;
  44. {{deserialize '_v' '_ele' __value_type}}
  45. _dataList.Add(_v);
  46. _dataMap.Add(_v.{{format_property_name __code_style __table.index_field.name}}, _v);
  47. }
  48. }
  49. public System.Collections.Generic.Dictionary<{{declaring_type_name __key_type}}, {{declaring_type_name __value_type}}> DataMap => _dataMap;
  50. public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
  51. {{~if __value_type.is_dynamic~}}
  52. public T GetOrDefaultAs<T>({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => _dataMap.TryGetValue(key, out var v) ? (T)v : default;
  53. public T GetAs<T>({{declaring_type_name __key_type}} key) where T : {{declaring_type_name __value_type}} => (T)_dataMap[key];
  54. {{~end~}}
  55. public {{declaring_type_name __value_type}} GetOrDefault({{declaring_type_name __key_type}} key) => _dataMap.TryGetValue(key, out var v) ? v : default;
  56. public {{declaring_type_name __value_type}} Get({{declaring_type_name __key_type}} key) => _dataMap[key];
  57. public {{declaring_type_name __value_type}} this[{{declaring_type_name __key_type}} key] => _dataMap[key];
  58. public void ResolveRef({{__manager_name}} tables)
  59. {
  60. {{~if is_bean_need_resolve_ref value_type ~}}
  61. foreach(var _v in _dataList)
  62. {
  63. _v.ResolveRef(tables);
  64. }
  65. {{~end~}}
  66. }
  67. {{~else if __table.is_list_table ~}}
  68. private readonly System.Collections.Generic.List<{{declaring_type_name __value_type}}> _dataList;
  69. {{~if __table.is_union_index~}}
  70. private {{table_union_map_type_name}} _dataMapUnion;
  71. {{~else if !__table.index_list.empty?~}}
  72. {{~for idx in __table.index_list~}}
  73. private System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}> _dataMap_{{idx.index_field.name}};
  74. {{~end~}}
  75. {{~end~}}
  76. public {{__name}}(JArray _buf)
  77. {
  78. _dataList = new System.Collections.Generic.List<{{declaring_type_name __value_type}}>(_buf.Count);
  79. foreach(JObject _ele in _buf)
  80. {
  81. {{declaring_type_name __value_type}} _v;
  82. {{deserialize '_v' '_ele' __value_type}}
  83. _dataList.Add(_v);
  84. }
  85. {{~if __table.is_union_index~}}
  86. _dataMapUnion = new {{table_union_map_type_name}}(_buf.Count);
  87. foreach(var _v in _dataList)
  88. {
  89. _dataMapUnion.Add(({{table_key_list "_v"}}), _v);
  90. }
  91. {{~else if !__table.index_list.empty?~}}
  92. {{~for idx in __table.index_list~}}
  93. _dataMap_{{idx.index_field.name}} = new System.Collections.Generic.Dictionary<{{declaring_type_name idx.type}}, {{declaring_type_name __value_type}}>(_buf.Count);
  94. {{~end~}}
  95. foreach(var _v in _dataList)
  96. {
  97. {{~for idx in __table.index_list~}}
  98. _dataMap_{{idx.index_field.name}}.Add(_v.{{format_property_name __code_style idx.index_field.name}}, _v);
  99. {{~end~}}
  100. }
  101. {{~end~}}
  102. }
  103. public System.Collections.Generic.List<{{declaring_type_name __value_type}}> DataList => _dataList;
  104. {{~if __table.is_union_index~}}
  105. public {{declaring_type_name __value_type}} Get({{table_param_def_list}}) => _dataMapUnion.TryGetValue(({{table_param_name_list}}), out {{declaring_type_name __value_type}} __v) ? __v : default;
  106. {{~else if !__table.index_list.empty? ~}}
  107. {{~for idx in __table.index_list~}}
  108. public {{declaring_type_name __value_type}} GetBy{{format_property_name __code_style idx.index_field.name}}({{declaring_type_name idx.type}} key) => _dataMap_{{idx.index_field.name}}.TryGetValue(key, out {{declaring_type_name __value_type}} __v) ? __v : default;
  109. {{~end~}}
  110. {{~end~}}
  111. public void ResolveRef({{__manager_name}} tables)
  112. {
  113. {{~if is_bean_need_resolve_ref value_type ~}}
  114. foreach(var _v in _dataList)
  115. {
  116. _v.ResolveRef(tables);
  117. }
  118. {{~end~}}
  119. }
  120. {{~else~}}
  121. private readonly {{declaring_type_name __value_type}} _data;
  122. public {{declaring_type_name __value_type}} Data => _data;
  123. public {{__name}}(JArray _buf)
  124. {
  125. int n = _buf.Count;
  126. if (n != 1) throw new SerializationException("table mode=one, but size != 1");
  127. {{deserialize '_data' '_buf[0]' __value_type}}
  128. }
  129. {{~ for field in __value_type.def_bean.hierarchy_export_fields ~}}
  130. {{~if field.comment != '' ~}}
  131. /// <summary>
  132. /// {{escape_comment field.comment}}
  133. /// </summary>
  134. {{~end~}}
  135. public {{declaring_type_name field.ctype}} {{format_property_name __code_style field.name}} => _data.{{format_property_name __code_style field.name}};
  136. {{~end~}}
  137. public void ResolveRef({{__manager_name}} tables)
  138. {
  139. {{~if is_bean_need_resolve_ref value_type ~}}
  140. _data.ResolveRef(tables);
  141. {{~end~}}
  142. }
  143. {{~end~}}
  144. }
  145. {{namespace_with_grace_end __namespace_with_top_module}}