Exemplo n.º 1
0
        public static object ToOutputData(DefTable table, List <Record> records, string dataType)
        {
            switch (dataType)
            {
            case "data_bin":
            {
                var buf = ThreadLocalTemporalByteBufPool.Alloc(1024 * 1024);
                BinaryExportor.Ins.WriteList(table, records, buf);
                var bytes = buf.CopyData();
                ThreadLocalTemporalByteBufPool.Free(buf);
                return(bytes);
            }

            case "data_json":
            case "data_json2":
            {
                // data_json与data_json2格式区别在于
                // data_json的map格式是 [[key1,value1],[] ..]
                // data_json2的map格式是 { key1:value1, ...}
                var ss         = new MemoryStream();
                var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
                    {
                        Indented       = !table.Assembly.OutputCompactJson,
                        SkipValidation = false,
                        Encoder        = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
                    });
                if (dataType == "data_json")
                {
                    JsonExportor.Ins.WriteAsArray(records, jsonWriter);
                }
                else
                {
                    Json2Exportor.Ins.WriteAsObject(table, records, jsonWriter);
                }
                jsonWriter.Flush();
                return(DataUtil.StreamToBytes(ss));
            }

            case "data_lua":
            {
                var content = new StringBuilder();

                switch (table.Mode)
                {
                case ETableMode.ONE:
                {
                    LuaExportor.Ins.ExportTableSingleton(table, records[0], content);
                    break;
                }

                case ETableMode.MAP:
                {
                    LuaExportor.Ins.ExportTableMap(table, records, content);
                    break;
                }

                case ETableMode.LIST:
                {
                    LuaExportor.Ins.ExportTableList(table, records, content);
                    break;
                }

                default:
                {
                    throw new NotSupportedException();
                }
                }
                return(string.Join('\n', content));
            }

            case "data_protobuf_bin":
            {
                var ms = new MemoryStream();
                ProtobufBinExportor.Ins.WriteList(table, records, ms);
                return(DataUtil.StreamToBytes(ms));
            }

            case "data_protobuf_json":
            {
                var ss         = new MemoryStream();
                var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
                    {
                        Indented       = !table.Assembly.OutputCompactJson,
                        SkipValidation = false,
                        Encoder        = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
                    });
                ProtobufJsonExportor.Ins.WriteAsTable(records, jsonWriter);
                jsonWriter.Flush();
                return(DataUtil.StreamToBytes(ss));
            }

            case "data_msgpack":
            {
                var ms     = new System.Buffers.ArrayBufferWriter <byte>();
                var writer = new MessagePackWriter(ms);
                MsgPackExportor.Ins.WriteList(table, records, ref writer);
                writer.Flush();
                return(ms.WrittenSpan.ToArray());
            }

            case "data_flatbuffers_json":
            {
                var ss         = new MemoryStream();
                var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
                    {
                        Indented       = !table.Assembly.OutputCompactJson,
                        SkipValidation = false,
                        Encoder        = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
                    });
                FlatBuffersJsonExportor.Ins.WriteAsTable(records, jsonWriter);
                jsonWriter.Flush();
                return(DataUtil.StreamToBytes(ss));
            }

            //case "data_erlang":
            //{
            //    var content = new StringBuilder();
            //    switch (table.Mode)
            //    {
            //        case ETableMode.ONE:
            //        {
            //            ErlangExport.Ins.ExportTableSingleton(table, records[0], content);
            //            break;
            //        }
            //        case ETableMode.MAP:
            //        {
            //            ErlangExport.Ins.ExportTableMap(table, records, content);
            //            break;
            //        }
            //        default:
            //        {
            //            throw new NotSupportedException();
            //        }
            //    }
            //    return content.ToString();
            //}
            default:
            {
                throw new ArgumentException($"not support datatype:{dataType}");
            }
            }
        }
 public static string CsImplDataType(DefBean type, DefBean parent)
 {
     return(DataUtil.GetImplTypeName(type, parent));
 }