Skip to content

Commit 2f3435a

Browse files
Support optional fields as pointers (#96)
1 parent aee1e76 commit 2f3435a

File tree

9 files changed

+29
-9
lines changed

9 files changed

+29
-9
lines changed

genGo.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,19 +212,23 @@ func (gen *CodeGenerator) GoComplexType(v *ComplexType) {
212212
}
213213

214214
for _, element := range v.Elements {
215-
var plural string
215+
fieldType := genGoFieldType(getBasefromSimpleType(trimNSPrefix(element.Type), gen.ProtoTree))
216+
216217
if element.Plural {
217-
plural = "[]"
218+
fieldType = "[]" + fieldType
218219
}
219220
var optional string
220221
if element.Optional {
221-
optional = `,omitempty`
222+
if !element.Plural && !strings.HasPrefix(fieldType, `*`) {
223+
fieldType = "*" + fieldType
224+
} else {
225+
optional = `,omitempty`
226+
}
222227
}
223-
fieldType := genGoFieldType(getBasefromSimpleType(trimNSPrefix(element.Type), gen.ProtoTree))
224228
if fieldType == "time.Time" {
225229
gen.ImportTime = true
226230
}
227-
content += fmt.Sprintf("\t%s\t%s%s\t`xml:\"%s%s\"`\n", genGoFieldName(element.Name, false), plural, fieldType, element.Name, optional)
231+
content += fmt.Sprintf("\t%s\t%s\t`xml:\"%s%s\"`\n", genGoFieldName(element.Name, false), fieldType, element.Name, optional)
228232
}
229233
if len(v.Base) > 0 {
230234
// If the type is a built-in type, generate a Value field as chardata.

genJava.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,11 @@ func (gen *CodeGenerator) JavaComplexType(v *ComplexType) {
169169
if element.Plural {
170170
fieldType = fmt.Sprintf("List<%s>", fieldType)
171171
}
172-
content += fmt.Sprintf("\t@XmlElement(required = true, name = \"%s\")\n\tprotected %s %s;\n", element.Name, fieldType, genJavaFieldName(element.Name, false))
172+
required := `required = true, `
173+
if element.Optional {
174+
required = ""
175+
}
176+
content += fmt.Sprintf("\t@XmlElement(%sname = \"%s\")\n\tprotected %s %s;\n", required, element.Name, fieldType, genJavaFieldName(element.Name, false))
173177
}
174178

175179
if len(v.Base) > 0 && isBuiltInJavaType(v.Base) {

genTypeScript.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,11 @@ func (gen *CodeGenerator) TypeScriptComplexType(v *ComplexType) {
164164

165165
for _, element := range v.Elements {
166166
fieldType := genTypeScriptFieldType(getBasefromSimpleType(trimNSPrefix(element.Type), gen.ProtoTree), element.Plural)
167-
content += fmt.Sprintf("\t%s: %s;\n", genTypeScriptFieldName(element.Name, false), fieldType)
167+
fieldName := genTypeScriptFieldName(element.Name, false)
168+
if element.Optional {
169+
fieldName += `?`
170+
}
171+
content += fmt.Sprintf("\t%s: %s;\n", fieldName, fieldType)
168172
}
169173

170174
if len(v.Base) > 0 && isBuiltInTypeScriptType(v.Base) {

test/c/base64.xsd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ typedef struct {
1818
char Title;
1919
char Blob[];
2020
char Timestamp;
21+
char Metadata;
2122
} MyType4;
2223

2324
// MyType5 ...

test/go/base64.xsd.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/java/base64.xsd.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class MyType4 {
4343
protected List<Byte> Blob;
4444
@XmlElement(required = true, name = "timestamp")
4545
protected String Timestamp;
46+
@XmlElement(name = "metadata")
47+
protected String Metadata;
4648
}
4749

4850
// MyType5 ...
@@ -92,7 +94,7 @@ public class TopLevel extends MyType6 {
9294
protected Float CostAttr;
9395
@XmlAttribute(name = "LastUpdated")
9496
protected String LastUpdatedAttr;
95-
@XmlElement(required = true, name = "nested")
97+
@XmlElement(name = "nested")
9698
protected MyType7 Nested;
9799
@XmlElement(required = true, name = "myType1")
98100
protected List<List<Byte>> MyType1;

test/rs/base64.xsd.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ pub struct MyType4 {
4343
pub blob: String,
4444
#[serde(rename = "timestamp")]
4545
pub timestamp: u8,
46+
#[serde(rename = "metadata")]
47+
pub metadata: Option<String>,
4648
}
4749

4850

test/ts/base64.xsd.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export class MyType4 {
2020
Title: string;
2121
Blob: Uint8Array;
2222
Timestamp: string;
23+
Metadata?: string;
2324
}
2425

2526
// MyType5 ...
@@ -56,7 +57,7 @@ export class MyType10 {
5657
export class TopLevel extends MyType6 {
5758
CostAttr: number | null;
5859
LastUpdatedAttr: string | null;
59-
Nested: MyType7;
60+
Nested?: MyType7;
6061
MyType1: Uint8Array;
6162
MyType2: Array<MyType2>;
6263
}

test/xsd/base64.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<element name="title" type="string"/>
2727
<element name="blob" type="base64Binary"/>
2828
<element name="timestamp" type="dateTime"/>
29+
<element name="metadata" type="string" minOccurs="0"/>
2930
</sequence>
3031
</complexType>
3132

0 commit comments

Comments
 (0)