Exemple #1
0
        private void AddAllRef(AbiDef abiDef, HashSet <string> stuctFilter, string typeName)
        {
            var s = abiDef.Structs.FirstOrDefault(i => i.Name.Equals(typeName));

            if (s != null)
            {
                if (!string.IsNullOrEmpty(s.Base) && !stuctFilter.Contains(s.Base))
                {
                    AddAllRef(abiDef, stuctFilter, s.Base);
                }

                if (!stuctFilter.Contains(typeName))
                {
                    stuctFilter.Add(typeName);

                    foreach (var f in s.Fields)
                    {
                        AddAllRef(abiDef, stuctFilter, f.Type);
                    }
                }
            }
        }
Exemple #2
0
        public void StructToClass(string outDirPath, string structNamespace, StructDef str, AbiDef abi)
        {
            FileStream   fs = null;
            StreamWriter sw = null;

            try
            {
                fs = new FileStream($"{outDirPath}{str.Name.ToTitleCase()}.cs", FileMode.OpenOrCreate);
                sw = new StreamWriter(fs);
                StructToClass(sw, structNamespace, str, abi);
            }
            finally
            {
                sw?.Dispose();
                fs?.Dispose();
            }
        }
Exemple #3
0
        public virtual string GetType(string type, AbiDef contract)
        {
            switch (type)
            {
            case "string":
            case "shared_string":
            case "fixed_string":
                return("string");

            case "int":
            case "int32":
            case "int32_t":
                return("int");

            case "uint8_t":
            case "uint8":
            case "int8":
                return("byte");

            case "uint16_t":
            case "uint16":
                return("ushort");

            case "uint32_t":
            case "uint32":
                return("uint");

            case "uint64_t":
            case "uint64":
                return("ulong");

            case "uint128_t":
            case "uint128":
                return("UInt128");

            case "int16_t":
            case "int16":
                return("short");

            case "int64_t":
            case "int64":
                return("long");

            case "bool":
                return("bool");

            case "char":
                return("char");

            case "double":
            case "float64":
                return("double");

            case "float32":
                return("float");

            case "variant_object":
                return("object");

            case "share_type":
                return("object");

            case "name":
                return("BaseName");

            case "checksum256":
                return("string");

            default:
            {
                var t = contract.Types.FirstOrDefault(i => i.NewTypeName.EndsWith(type));

                if (t != null)
                {
                    return(GetType(t.Type, contract));
                }

                return(type.ToTitleCase());
            }
            }
        }
Exemple #4
0
        public void ActionToClass(StreamWriter sw, string actionsNamespace, string structNamespace, string contractName, ActionDef action, AbiDef abi)
        {
            sw.WriteLine("using Newtonsoft.Json;");
            sw.WriteLine("using Ditch.EOS;");
            sw.WriteLine($"using {structNamespace};");
            sw.WriteLine("using Ditch.EOS.Models;");
            sw.WriteLine();
            sw.WriteLine($"namespace {actionsNamespace}");
            sw.WriteLine("{");

            var inden = new string(' ', 4);

            sw.WriteLine($"{inden}[JsonObject(MemberSerialization.OptIn)]");
            sw.WriteLine($"{inden}public class {action.Name.ToTitleCase()}Action : BaseAction");
            sw.WriteLine($"{inden}{{");
            sw.WriteLine($"{inden}{inden}public const string ContractName = \"{contractName}\";");
            sw.WriteLine($"{inden}{inden}public const string ActionName = \"{action.Name}\";");
            sw.WriteLine();
            sw.WriteLine($"{inden}{inden}public {action.Name.ToTitleCase()}Action() : base(ContractName, ActionName) {{ }}");
            sw.WriteLine();

            var str = abi.Structs.FirstOrDefault(i => i.Name.Equals(action.Type));

            if (str != null && str.Fields.Any())
            {
                sw.WriteLine($"{inden}{inden}public {action.Name.ToTitleCase()}Action(string accountName, Ditch.EOS.Models.PermissionLevel[] permissionLevels, {action.Type.ToTitleCase()} args)");
                sw.WriteLine($"{inden}{inden}    : base(ContractName, accountName, ActionName, permissionLevels, args) {{ }}");
            }
            else
            {
                sw.WriteLine($"{inden}{inden}public {action.Name.ToTitleCase()}Action(string accountName, Ditch.EOS.Models.PermissionLevel[] permissionLevels)");
                sw.WriteLine($"{inden}{inden}    : base(ContractName, accountName, ActionName, permissionLevels, null) {{ }}");
            }
            sw.WriteLine($"{inden}}}");
            sw.WriteLine("}");
        }
Exemple #5
0
        public void StructToClass(StreamWriter sw, string structNamespace, StructDef str, AbiDef abi)
        {
            sw.WriteLine("using Newtonsoft.Json;");
            sw.WriteLine("using Ditch.EOS;");
            sw.WriteLine("using Ditch.Core.Models;");
            sw.WriteLine("using Ditch.EOS.Models;");
            sw.WriteLine();
            sw.WriteLine($"namespace {structNamespace}");
            sw.WriteLine("{");

            var inden = new string(' ', 4);

            sw.WriteLine($"{inden}[JsonObject(MemberSerialization.OptIn)]");
            sw.WriteLine($"{inden}public class {str.Name.ToTitleCase()}{(string.IsNullOrEmpty(str.Base) ? string.Empty : $" : {str.Base.ToTitleCase()}")}");
            sw.WriteLine($"{inden}{{");

            foreach (var field in str.Fields)
            {
                sw.WriteLine($"{inden}{inden}[JsonProperty(\"{field.Name}\")]");
                sw.WriteLine($"{inden}{inden}public {GetType(field.Type, abi)} {field.Name.ToTitleCase()} {{get; set;}}");
                sw.WriteLine();
            }

            sw.WriteLine($"{inden}}}");
            sw.WriteLine("}");
        }
Exemple #6
0
        public void ActionToClass(string outDirPath, string actionsNamespace, string structNamespace, string contractName, ActionDef action, AbiDef abi)
        {
            FileStream   fs = null;
            StreamWriter sw = null;

            try
            {
                fs = new FileStream($"{outDirPath}{action.Name.ToTitleCase()}Action.cs", FileMode.OpenOrCreate);
                sw = new StreamWriter(fs);
                ActionToClass(sw, actionsNamespace, structNamespace, contractName, action, abi);
            }
            finally
            {
                sw?.Dispose();
                fs?.Dispose();
            }
        }