Ejemplo n.º 1
0
 private void WriteList(StringBuilder builder, IFieldAccessor accessor, IList list)
 {
     builder.Append("[ ");
     bool first = true;
     foreach (var value in list)
     {
         if (!CanWriteSingleValue(accessor.Descriptor, value))
         {
             continue;
         }
         if (!first)
         {
             builder.Append(", ");
         }
         WriteSingleValue(builder, accessor.Descriptor, value);
         first = false;
     }
     builder.Append(first ? "]" : " ]");
 }
Ejemplo n.º 2
0
 private void WriteDictionary(StringBuilder builder, IFieldAccessor accessor, IDictionary dictionary)
 {
     builder.Append("{ ");
     bool first = true;
     FieldDescriptor keyType = accessor.Descriptor.MessageType.FindFieldByNumber(1);
     FieldDescriptor valueType = accessor.Descriptor.MessageType.FindFieldByNumber(2);
     // This will box each pair. Could use IDictionaryEnumerator, but that's ugly in terms of disposal.
     foreach (DictionaryEntry pair in dictionary)
     {
         if (!CanWriteSingleValue(valueType, pair.Value))
         {
             continue;
         }
         if (!first)
         {
             builder.Append(", ");
         }
         string keyText;
         switch (keyType.FieldType)
         {
             case FieldType.String:
                 keyText = (string) pair.Key;
                 break;
             case FieldType.Bool:
                 keyText = (bool) pair.Key ? "true" : "false";
                 break;
             case FieldType.Fixed32:
             case FieldType.Fixed64:
             case FieldType.SFixed32:
             case FieldType.SFixed64:
             case FieldType.Int32:
             case FieldType.Int64:
             case FieldType.SInt32:
             case FieldType.SInt64:
             case FieldType.UInt32:
             case FieldType.UInt64:
                 keyText = ((IFormattable) pair.Key).ToString("d", CultureInfo.InvariantCulture);
                 break;
             default:
                 throw new ArgumentException("Invalid key type: " + keyType.FieldType);
         }
         WriteString(builder, keyText);
         builder.Append(": ");
         WriteSingleValue(builder, valueType, pair.Value);
         first = false;
     }
     builder.Append(first ? "}" : " }");
 }
Ejemplo n.º 3
0
 private static bool IsDefaultValue(IFieldAccessor accessor, object value)
 {
     if (accessor.Descriptor.IsMap)
     {
         IDictionary dictionary = (IDictionary) value;
         return dictionary.Count == 0;
     }
     if (accessor.Descriptor.IsRepeated)
     {
         IList list = (IList) value;
         return list.Count == 0;
     }
     switch (accessor.Descriptor.FieldType)
     {
         case FieldType.Bool:
             return (bool) value == false;
         case FieldType.Bytes:
             return (ByteString) value == ByteString.Empty;
         case FieldType.String:
             return (string) value == "";
         case FieldType.Double:
             return (double) value == 0.0;
         case FieldType.SInt32:
         case FieldType.Int32:
         case FieldType.SFixed32:
         case FieldType.Enum:
             return (int) value == 0;
         case FieldType.Fixed32:
         case FieldType.UInt32:
             return (uint) value == 0;
         case FieldType.Fixed64:
         case FieldType.UInt64:
             return (ulong) value == 0;
         case FieldType.SFixed64:
         case FieldType.Int64:
         case FieldType.SInt64:
             return (long) value == 0;
         case FieldType.Float:
             return (float) value == 0f;
         case FieldType.Message:
         case FieldType.Group: // Never expect to get this, but...
             return value == null;
         default:
             throw new ArgumentException("Invalid field type");
     }
 }
Ejemplo n.º 4
0
 private void WriteValue(StringBuilder builder, IFieldAccessor accessor, object value)
 {
     if (accessor.Descriptor.IsMap)
     {
         WriteDictionary(builder, accessor, (IDictionary) value);
     }
     else if (accessor.Descriptor.IsRepeated)
     {
         WriteList(builder, accessor, (IList) value);
     }
     else
     {
         WriteSingleValue(builder, accessor.Descriptor, value);
     }
 }
Ejemplo n.º 5
0
        public static bool SetValue(IFieldAccessor accessor, IMessage message, string value)
        {
            if (accessor.Descriptor.IsMap)
            {
                return(false);
            }
            if (accessor.Descriptor.IsRepeated)
            {
                return(false);
            }
            switch (accessor.Descriptor.FieldType)
            {
            case FieldType.Bool:
                if (value == "1" || value.ToLower() == "true")
                {
                    accessor.SetValue(message, true);
                }
                else
                {
                    accessor.SetValue(message, false);
                }
                return(true);

            case FieldType.Bytes:
                return(false);

            case FieldType.String:
                accessor.SetValue(message, value);
                return(true);

            case FieldType.Double:
                if (double.TryParse(value, out var doubleValue))
                {
                    accessor.SetValue(message, doubleValue);
                    return(true);
                }
                return(false);

            case FieldType.SInt32:
            case FieldType.Int32:
            case FieldType.SFixed32:
            case FieldType.Enum:
                if (int.TryParse(value, out var intValue))
                {
                    accessor.SetValue(message, intValue);
                    return(true);
                }
                return(false);

            case FieldType.Fixed32:
            case FieldType.UInt32:
                if (uint.TryParse(value, out var untValue))
                {
                    accessor.SetValue(message, untValue);
                    return(true);
                }
                return(false);

            case FieldType.Fixed64:
            case FieldType.UInt64:
                if (ulong.TryParse(value, out var ulongValue))
                {
                    accessor.SetValue(message, ulongValue);
                    return(true);
                }
                return(false);

            case FieldType.SFixed64:
            case FieldType.Int64:
            case FieldType.SInt64:
                if (long.TryParse(value, out var longValue))
                {
                    accessor.SetValue(message, longValue);
                    return(true);
                }
                return(false);

            case FieldType.Float:
                if (float.TryParse(value, out var floatValue))
                {
                    accessor.SetValue(message, floatValue);
                    return(true);
                }
                return(false);

            default:
                return(false);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Look up and cross-link all field types etc.
        /// </summary>
        internal void CrossLink()
        {
            if (Proto.TypeName != "")
            {
                IDescriptor typeDescriptor =
                    File.DescriptorPool.LookupSymbol(Proto.TypeName, this);

                if (Proto.Type != 0)
                {
                    // Choose field type based on symbol.
                    if (typeDescriptor is MessageDescriptor)
                    {
                        fieldType = FieldType.Message;
                    }
                    else if (typeDescriptor is EnumDescriptor)
                    {
                        fieldType = FieldType.Enum;
                    }
                    else
                    {
                        throw new DescriptorValidationException(this, $"\"{Proto.TypeName}\" is not a type.");
                    }
                }

                if (fieldType == FieldType.Message)
                {
                    if (!(typeDescriptor is MessageDescriptor))
                    {
                        throw new DescriptorValidationException(this, $"\"{Proto.TypeName}\" is not a message type.");
                    }
                    messageType = (MessageDescriptor)typeDescriptor;

                    if (Proto.DefaultValue != "")
                    {
                        throw new DescriptorValidationException(this, "Messages can't have default values.");
                    }
                }
                else if (fieldType == FieldType.Enum)
                {
                    if (!(typeDescriptor is EnumDescriptor))
                    {
                        throw new DescriptorValidationException(this, $"\"{Proto.TypeName}\" is not an enum type.");
                    }
                    enumType = (EnumDescriptor)typeDescriptor;
                }
                else
                {
                    throw new DescriptorValidationException(this, "Field with primitive type has type_name.");
                }
            }
            else
            {
                if (fieldType == FieldType.Message || fieldType == FieldType.Enum)
                {
                    throw new DescriptorValidationException(this, "Field with message or enum type missing type_name.");
                }
            }

            // Note: no attempt to perform any default value parsing

            File.DescriptorPool.AddFieldByNumber(this);

            if (ContainingType != null && ContainingType.Proto.Options != null && ContainingType.Proto.Options.MessageSetWireFormat)
            {
                throw new DescriptorValidationException(this, "MessageSet format is not supported.");
            }
            accessor = CreateAccessor();
        }
Ejemplo n.º 7
0
 public ClassMetadata(ObjectContainerBase container, IReflectClass classReflector)
 {
     if (null == container)
     {
         throw new ArgumentNullException();
     }
     _container = container;
     ClassReflector(classReflector);
     _index = CreateIndexStrategy();
     _classIndexed = true;
     if (_container.Config().ExceptionsOnNotStorable())
     {
         _fieldAccessor = new StrictFieldAccessor();
     }
     else
     {
         _fieldAccessor = new LenientFieldAccessor();
     }
 }
Ejemplo n.º 8
0
 protected ClassMetadata(ObjectContainerBase container)
 {
     if (null == container)
     {
         throw new ArgumentNullException();
     }
     _container = container;
     _index = CreateIndexStrategy();
     _classIndexed = true;
     _fieldAccessor = new StrictFieldAccessor();
 }
Ejemplo n.º 9
0
        public TableSheet(Worksheet ws, AsyncLightningApp lApp, MessageDescriptor messageDescriptor, string uniqueKeyName,
                          bool nestedData = false, int limit = 0, string sortColumn = null, bool sortAscending = true)
        {
            _nestedFields  = new List <Tuple <IFieldAccessor, IFieldAccessor> >();
            _uniqueKeyName = uniqueKeyName;
            Ws             = ws;
            LApp           = lApp;
            DisplayData    = new Dictionary <object, TMessageClass>();
            Fields         = messageDescriptor.Fields.InDeclarationOrder()
                             .Where(f => f.FieldType != FieldType.Message || !nestedData).ToList();

            var messageFields = messageDescriptor.Fields.InDeclarationOrder()
                                .Where(f => f.FieldType == FieldType.Message && nestedData && !f.IsRepeated && !f.IsMap).ToList();

            foreach (var parentField in messageFields)
            {
                var childFields = parentField.MessageType.Fields.InDeclarationOrder();
                Fields = Fields.Concat(childFields).ToArray();
                foreach (var childField in childFields)
                {
                    var nf = new Tuple <IFieldAccessor, IFieldAccessor>(parentField.Accessor, childField.Accessor);
                    if (!parentField.IsMap && !parentField.IsRepeated)
                    {
                        _nestedFields.Add(nf);
                    }
                    if (childField.Name != _uniqueKeyName)
                    {
                        continue;
                    }
                    _uniqueKeyField    = childField.Accessor;
                    _uniqueNestedField = parentField.Accessor;
                }
            }

            if (_uniqueKeyField == null)
            {
                foreach (var field in Fields)
                {
                    if (field.Name == _uniqueKeyName)
                    {
                        _uniqueKeyField = field.Accessor;
                    }
                }
            }

            _limit         = limit;
            _sortColumn    = sortColumn;
            _sortAscending = sortAscending;
            _wideColumns   = new List <string>
            {
                "pub_key",
                "remote_pubkey",
                "remote_pub_key",
                "remote_node_pub",
                "channel_point",
                "pending_htlcs",
                "closing_tx_hash",
                "closing_txid",
                "chain_hash",
                "payment_preimage",
                "payment_hash",
                "path",
                "tx_hash",
                "block_hash",
                "dest_addresses"
            };
        }
Ejemplo n.º 10
0
 private static string GetValue(TMessageClass message, IFieldAccessor targetField)
 {
     return(targetField.GetValue(message).ToString());
 }
Ejemplo n.º 11
0
        internal void CrossLink()
        {
            if (FieldDescriptor.smethod_3(this.Proto.TypeName, ""))
            {
                goto IL_191;
            }
            goto IL_3CA;
            uint arg_333_0;

            while (true)
            {
IL_32E:
                uint num;
                switch ((num = (arg_333_0 ^ 3013306013u)) % 30u)
                {
                case 0u:
                {
                    IDescriptor descriptor;
                    arg_333_0 = ((descriptor is EnumDescriptor) ? 2821381071u : 2537082698u);
                    continue;
                }

                case 1u:
                    arg_333_0 = (((!FieldDescriptor.smethod_3(this.Proto.DefaultValue, "")) ? 3504232881u : 4081425330u) ^ num * 3450336043u);
                    continue;

                case 2u:
                {
                    IDescriptor descriptor;
                    this.messageType = (MessageDescriptor)descriptor;
                    arg_333_0        = 4036915674u;
                    continue;
                }

                case 3u:
                {
                    IDescriptor descriptor = base.File.DescriptorPool.LookupSymbol(this.Proto.TypeName, this);
                    arg_333_0 = (num * 1137267228u ^ 1800642603u);
                    continue;
                }

                case 4u:
                    arg_333_0 = (((this.Proto.Type != (FieldDescriptorProto.Types.Type) 0) ? 3944142871u : 3881033019u) ^ num * 2947199265u);
                    continue;

                case 5u:
                    arg_333_0 = (num * 3768717094u ^ 4265278771u);
                    continue;

                case 6u:
                    goto IL_3D9;

                case 7u:
                    this.fieldType = FieldType.Message;
                    arg_333_0      = (num * 2040762779u ^ 2945237881u);
                    continue;

                case 8u:
                    arg_333_0 = (((this.fieldType != FieldType.Enum) ? 4206089270u : 4050017104u) ^ num * 2028914515u);
                    continue;

                case 9u:
                {
                    IDescriptor descriptor;
                    arg_333_0 = (((!(descriptor is EnumDescriptor)) ? 2973306776u : 2993182602u) ^ num * 1211533732u);
                    continue;
                }

                case 10u:
                    this.fieldType = FieldType.Enum;
                    arg_333_0      = (num * 335191304u ^ 978261121u);
                    continue;

                case 11u:
                    goto IL_3EA;

                case 12u:
                {
                    IDescriptor descriptor;
                    arg_333_0 = (((descriptor is MessageDescriptor) ? 1340053915u : 1990891018u) ^ num * 3272437084u);
                    continue;
                }

                case 13u:
                    goto IL_3FB;

                case 14u:
                    goto IL_425;

                case 15u:
                    goto IL_436;

                case 16u:
                    goto IL_191;

                case 17u:
                {
                    IDescriptor descriptor;
                    this.enumType = (EnumDescriptor)descriptor;
                    arg_333_0     = 4053406812u;
                    continue;
                }

                case 18u:
                    this.accessor = this.CreateAccessor(this.propertyName);
                    arg_333_0     = 3795529724u;
                    continue;

                case 19u:
                    goto IL_447;

                case 20u:
                    arg_333_0 = ((this.fieldType != FieldType.Message) ? 2460784210u : 3995577395u);
                    continue;

                case 22u:
                    arg_333_0 = (((this.containingType.Proto.Options == null) ? 419873589u : 668635125u) ^ num * 1090866907u);
                    continue;

                case 23u:
                    arg_333_0 = (((this.containingType != null) ? 572724748u : 1874315500u) ^ num * 1436619519u);
                    continue;

                case 24u:
                {
                    IDescriptor descriptor;
                    arg_333_0 = (((!(descriptor is MessageDescriptor)) ? 471649775u : 1414817504u) ^ num * 4283271988u);
                    continue;
                }

                case 25u:
                    arg_333_0 = ((this.fieldType != FieldType.Enum) ? 2708078287u : 4205631964u);
                    continue;

                case 26u:
                    goto IL_3CA;

                case 27u:
                    goto IL_471;

                case 28u:
                    arg_333_0 = ((this.containingType.Proto.Options.MessageSetWireFormat ? 288763958u : 1623010749u) ^ num * 3306098553u);
                    continue;

                case 29u:
                    base.File.DescriptorPool.AddFieldByNumber(this);
                    arg_333_0 = 2913542014u;
                    continue;
                }
                break;
            }
            return;

IL_3D9:
            throw new DescriptorValidationException(this, Module.smethod_33 <string>(1009936473u));
IL_3EA:
            throw new DescriptorValidationException(this, Module.smethod_37 <string>(3005745843u));
IL_3FB:
            throw new DescriptorValidationException(this, FieldDescriptor.smethod_0(Module.smethod_33 <string>(3783798939u), new object[]
            {
                this.Proto.TypeName
            }));
IL_425:
            throw new DescriptorValidationException(this, Module.smethod_33 <string>(306987899u));
IL_436:
            throw new DescriptorValidationException(this, Module.smethod_37 <string>(785259833u));
IL_447:
            throw new DescriptorValidationException(this, FieldDescriptor.smethod_0(Module.smethod_33 <string>(2096439923u), new object[]
            {
                this.Proto.TypeName
            }));
IL_471:
            throw new DescriptorValidationException(this, FieldDescriptor.smethod_0(Module.smethod_37 <string>(1924739148u), new object[]
            {
                this.Proto.TypeName
            }));
IL_191:
            arg_333_0 = 2419306412u;
            goto IL_32E;
IL_3CA:
            arg_333_0 = ((this.fieldType == FieldType.Message) ? 4199521082u : 2785444915u);
            goto IL_32E;
        }