Skip to content

Commit

Permalink
Refactoring.
Browse files Browse the repository at this point in the history
  • Loading branch information
Dmitriy Garanzha committed Jan 29, 2019
1 parent 1647ebb commit 054ca45
Showing 1 changed file with 31 additions and 13 deletions.
44 changes: 31 additions & 13 deletions generator/plugins/proto2gql/messages_inputs.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,23 +107,13 @@ func (g *Proto2GraphQL) getMessageFields(file *parsedFile, msg *parser.Message)
}

if fieldTypeMsgCfg.UnwrapField {
if len(fieldTypeMessage.Fields) != 1 {
return nil, errors.Wrapf(err, "can't unwrap message %s. Must have 1 field", msg.Name)
}
unwrappedField, err := g.getUnwrappedField(field)

fieldTypeFields, err := g.getMessageFields(fieldTypeFile, fieldTypeMessage)
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "failed to resolve unwrapped message %s field", fieldTypeMessage.Name)
}

fieldTypeField := fieldTypeFields[0]
fieldTypeField.Name = field.Name

if field.Repeated {
fieldTypeField.Type = graphql.GqlListTypeResolver(graphql.GqlNonNullTypeResolver(fieldTypeField.Type))
}

fields = append(fields, fieldTypeField)
fields = append(fields, *unwrappedField)

continue
}
Expand Down Expand Up @@ -171,3 +161,31 @@ func (g *Proto2GraphQL) getMessageFields(file *parsedFile, msg *parser.Message)

return fields, nil
}

func (g *Proto2GraphQL) getUnwrappedField(field *parser.Field) (*graphql.ObjectField, error) {
unwrappedMessage, ok := field.Type.(*parser.Message)

if !ok {
return nil, errors.New("can't unwrap field. Not a message")
}

unwrappedMessageFile, err := g.parsedFile(unwrappedMessage.File())

if len(unwrappedMessage.Fields) != 1 {
return nil, errors.Wrapf(err, "can't unwrap message. Must have 1 field")
}

messageFields, err := g.getMessageFields(unwrappedMessageFile, unwrappedMessage)
if err != nil {
return nil, err
}

unwrappedField := &messageFields[0]
unwrappedField.Name = field.Name

if field.Repeated {
unwrappedField.Type = graphql.GqlListTypeResolver(graphql.GqlNonNullTypeResolver(unwrappedField.Type))
}

return unwrappedField, nil
}

0 comments on commit 054ca45

Please sign in to comment.