go-xml icon indicating copy to clipboard operation
go-xml copied to clipboard

Optional struct fields with struct types throwing errors in xsdgen

Open nrlakin opened this issue 5 years ago • 1 comments

I think this was introduced in #93 (I hit it merging #93 into my fork because I wanted optional structs to render as pointers).

Running xsdgen throws the following error:

error generating go structs from xsd: oadr2b/oadr2b_tmp.go:1114:16: expected type, found '&' (and 5 more errors) in package oadr2b

In the debug output that follows, I see the following struct rendered:

type X509DataType struct {
	Item             string                          `xml:",any"`
	X509IssuerSerial *X509IssuerSerialType           `xml:"http://www.w3.org/2000/09/xmldsig# X509IssuerSerial,omitempty"`
	X509SKI          *&{%!s(token.Pos=0) <nil> byte} `xml:"http://www.w3.org/2000/09/xmldsig# X509SKI,omitempty"`
	X509SubjectName  string                          `xml:"http://www.w3.org/2000/09/xmldsig# X509SubjectName,omitempty"`
	X509Certificate  *&{%!s(token.Pos=0) <nil> byte} `xml:"http://www.w3.org/2000/09/xmldsig# X509Certificate,omitempty"`
	X509CRL          *&{%!s(token.Pos=0) <nil> byte} `xml:"http://www.w3.org/2000/09/xmldsig# X509CRL,omitempty"`
}

I'm looking at it because I'd like the feature, but you may want to revert. I'll try to add a minimal schema to xsdgen/testdata that replicates the issue in any case.

nrlakin avatar Mar 21 '20 22:03 nrlakin

I've reverted. I think I can see the error here: https://github.com/elliots/go-xml/blob/2161665b1a098d50c305f0bf938f7aca2e05fee0/xsdgen/xsdgen.go#L697

I don't think that's the right way to construct a pointer using go/ast. I haven't tried yet but it should probably be something like this:

    base = ast.StarExpr{X: base}

droyo avatar Mar 23 '20 22:03 droyo