jmattheis / goverter

Generate type-safe Go converters by simply defining an interface
https://goverter.jmattheis.de/
MIT License
499 stars 47 forks source link

Cannot set value for field XXX_NoUnkeyedLiteral because it does not exist on the source entry. #8

Closed liyuan1125 closed 1 year ago

liyuan1125 commented 2 years ago
//go:generate goverter api/pkg/converter

package converter

import (
    "product/pkg/ent"
    pb "product/server/account/proto"
)

// goverter:converter
type Converter interface {
    // goverter:ignore XXX_NoUnkeyedLiteral
    Convert(source ent.Account) pb.QueryResponse_Account
}

output

Cannot set value for field XXX_NoUnkeyedLiteral because it does not exist on the source entry.
jmattheis commented 2 years ago

Please add the models ent.Account and pb.QueryResponse_Account to this issue.

liyuan1125 commented 2 years ago

Please add the models ent.Account and pb.QueryResponse_Account to this issue.

type Account struct {
    ID uint64 `json:"id,omitempty"`
}

type QueryResponse_Account struct {
    ID                   uint64   `protobuf:"varint,1,opt,name=id,proto3" json:"id"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}
jmattheis commented 2 years ago

Cannot reproduce:

$ cat input.go
package test

// goverter:converter
type Converter interface {
        // goverter:ignore XXX_NoUnkeyedLiteral XXX_unrecognized XXX_sizecache
        Convert(source Account) QueryResponse_Account
}

type Account struct {
        ID uint64 `json:"id,omitempty"`
}

type QueryResponse_Account struct {
        ID                   uint64   `protobuf:"varint,1,opt,name=id,proto3" json:"id"`
        XXX_NoUnkeyedLiteral struct{} `json:"-"`
        XXX_unrecognized     []byte   `json:"-"`
        XXX_sizecache        int32    `json:"-"`
}
$ go run github.com/jmattheis/goverter/cmd/goverter test
$ cat generated/generated.go
// Code generated by github.com/jmattheis/goverter, DO NOT EDIT.

package generated

import test "test"

type ConverterImpl struct{}

func (c *ConverterImpl) Convert(source test.Account) test.QueryResponse_Account {
        var testQueryResponse_Account test.QueryResponse_Account
        testQueryResponse_Account.ID = source.ID
        return testQueryResponse_Account
}
liyuan1125 commented 2 years ago

Cannot reproduce:

$ cat input.go
package test

// goverter:converter
type Converter interface {
        // goverter:ignore XXX_NoUnkeyedLiteral XXX_unrecognized XXX_sizecache
        Convert(source Account) QueryResponse_Account
}

type Account struct {
        ID uint64 `json:"id,omitempty"`
}

type QueryResponse_Account struct {
        ID                   uint64   `protobuf:"varint,1,opt,name=id,proto3" json:"id"`
        XXX_NoUnkeyedLiteral struct{} `json:"-"`
        XXX_unrecognized     []byte   `json:"-"`
        XXX_sizecache        int32    `json:"-"`
}
$ go run github.com/jmattheis/goverter/cmd/goverter test
$ cat generated/generated.go
// Code generated by github.com/jmattheis/goverter, DO NOT EDIT.

package generated

import test "test"

type ConverterImpl struct{}

func (c *ConverterImpl) Convert(source test.Account) test.QueryResponse_Account {
        var testQueryResponse_Account test.QueryResponse_Account
        testQueryResponse_Account.ID = source.ID
        return testQueryResponse_Account
}

Hi, Thank you very much for your reply, I have created a repository here, you can take a look; https://github.com/leewithyuan/app1

jmattheis commented 2 years ago

You cannot use ignore on array, define it directly on the struct convert method

// goverter:converter
type Converter interface {
    // goverter:ignore XXX_NoUnkeyedLiteral
    // goverter:ignore XXX_unrecognized
    // goverter:ignore XXX_sizecache
    Convert(source models.Account) pb.Account
    ConvertArray(source []models.Account) []pb.Account
}
jmattheis commented 2 years ago

I'll add better error messages for this.

liyuan1125 commented 2 years ago

I'll add better error messages for this.

Thank you very much!