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 ? "]" : " ]"); }
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 ? "}" : " }"); }
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"); } }
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); } }
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); } }
/// <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(); }
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(); } }
protected ClassMetadata(ObjectContainerBase container) { if (null == container) { throw new ArgumentNullException(); } _container = container; _index = CreateIndexStrategy(); _classIndexed = true; _fieldAccessor = new StrictFieldAccessor(); }
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" }; }
private static string GetValue(TMessageClass message, IFieldAccessor targetField) { return(targetField.GetValue(message).ToString()); }
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; }