Example #1
0
        private (string signature, string code, bool isCompoundValue) createMethod(Type type, string name, string indent)
        {
            if (SignatureString.For.ContainsKey(type))
            {
                return(
                    SignatureString.For[type],
                    decoder + ".Get" + type.Name,
                    false
                    );
            }
            else
            {
                var decoderGenerator = new DecoderGenerator(decoder, message);
                decoderGenerator.add(name + "_inner", type, indent + "    ");
                return(
                    decoderGenerator.Signature,
                    @"() =>
" + indent + @"{
" + decoderGenerator.Result + @"
    " + indent + "return " + name + @"_inner;
" + indent + "}",
                    decoderGenerator.IsCompoundValue
                    );
            }
        }
Example #2
0
        private (string signature, string code, bool isCompoundValue) buildFromConstructor(string name, Type type, string indent)
        {
            var constructorParameters = type.GetTypeInfo()
                                        .GetConstructors()
                                        .Select(x => x.GetParameters())
                                        .OrderByDescending(x => x.Length)
                                        .First()
            ;
            var builder = new StringBuilder();

            builder.AppendLine(decoder + ".AdvanceToCompoundValue();");
            var signature = "(";

            foreach (var p in constructorParameters)
            {
                var decoderGenerator = new DecoderGenerator(decoder, message);
                decoderGenerator.add(name + "_" + p.Name, p.ParameterType, indent);
                signature += decoderGenerator.Signature;
                builder.Append(decoderGenerator.Result);
            }

            signature += ")";
            builder.Append(indent);
            builder.Append("var " + name + " = new " + Generator.BuildTypeString(type) + "(");
            builder.Append(string.Join(", ", constructorParameters.Select(x => name + "_" + x.Name)));
            builder.Append(");");

            return(signature, builder.ToString(), true);
        }