protected virtual MessageTemplateData GetMessageTemplateData(RosTypeInfo rosType, DetailedRosMessageType messageType, MessageDescriptor message) { var fields = message.Fields .Select(x => new FieldTemplateData { Index = message.Items .Select((item, index) => new { Item = item, Index = index }) .First(f => f.Item == x) .Index + 1, // Index of this field in serialized message (starting at 1) RosType = x.TypeInfo, RosIdentifier = x.Identifier, Type = new FieldTypeTemplateData(NameMapper.ResolveFullQualifiedInterfaceName(x.TypeInfo), NameMapper.ResolveFullQualifiedTypeName(x.TypeInfo), x.TypeInfo) , Identifier = NameMapper.GetFieldName(x.Identifier) }) .ToList(); var constants = message.Constants .Select(c => new ConstantTemplateData { Index = message.Items .Select((item, index) => new { item, index }) .First(x => x.item == c) .index + 1, RosType = c.TypeInfo, RosIdentifier = c.Identifier, TypeName = NameMapper.ResolveFullQualifiedTypeName(c.TypeInfo), Identifier = NameMapper.GetConstantName(c.Identifier), Value = c.Value }) .ToList(); var data = new MessageTemplateData { Package = PackageTemplateData, RosTypeName = NameMapper.GetRosTypeName(rosType.TypeName, messageType), RosAbstractTypeName = rosType.TypeName, TypeName = NameMapper.GetTypeName(rosType.TypeName, messageType), AbstractTypeName = NameMapper.GetTypeName(rosType.TypeName, DetailedRosMessageType.None), Fields = fields, Constants = constants, MessageType = new MessageTypeTemplateData(messageType) }; return(data); }