Skip to content

Commit 2cb22a3

Browse files
Represent elements of choices as pointers (#105)
1 parent ca26c15 commit 2cb22a3

File tree

8 files changed

+57
-7
lines changed

8 files changed

+57
-7
lines changed

genGo.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,6 @@ func (gen *CodeGenerator) GoComplexType(v *ComplexType) {
225225
if element.Optional {
226226
if !element.Plural && !strings.HasPrefix(fieldType, `*`) {
227227
fieldType = "*" + fieldType
228-
} else {
229-
optional = `,omitempty`
230228
}
231229
}
232230
if fieldType == "time.Time" {

test/c/base64.xsd.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ typedef struct {
5050
MyType4 Title;
5151
} MyType10;
5252

53+
// MyType11 ...
54+
typedef struct {
55+
int Option1;
56+
char Option2;
57+
MyType10 Option3;
58+
} MyType11;
59+
5360
// TopLevel ...
5461
typedef struct {
5562
float CostAttr; // attr, optional

test/go/base64.xsd.go

Lines changed: 8 additions & 1 deletion
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: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ public class MyType10 {
8888
protected MyType4 Title;
8989
}
9090

91+
// MyType11 ...
92+
public class MyType11 {
93+
@XmlElement(name = "option1")
94+
protected Integer Option1;
95+
@XmlElement(name = "option2")
96+
protected String Option2;
97+
@XmlElement(name = "option3")
98+
protected MyType10 Option3;
99+
}
100+
91101
// TopLevel ...
92102
public class TopLevel extends MyType6 {
93103
@XmlAttribute(name = "cost")
@@ -96,8 +106,8 @@ public class TopLevel extends MyType6 {
96106
protected String LastUpdatedAttr;
97107
@XmlElement(name = "nested")
98108
protected MyType7 Nested;
99-
@XmlElement(required = true, name = "myType1")
109+
@XmlElement(name = "myType1")
100110
protected List<List<Byte>> MyType1;
101-
@XmlElement(required = true, name = "myType2")
111+
@XmlElement(name = "myType2")
102112
protected List<MyType2> MyType2;
103113
}

test/rs/base64.xsd.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,18 @@ pub struct MyType10 {
100100
}
101101

102102

103+
// MyType11 ...
104+
#[derive(Debug, Deserialize, Serialize, PartialEq)]
105+
pub struct MyType11 {
106+
#[serde(rename = "option1")]
107+
pub option1: Option<i32>,
108+
#[serde(rename = "option2")]
109+
pub option2: Option<String>,
110+
#[serde(rename = "option3")]
111+
pub option3: Option<MyType10>,
112+
}
113+
114+
103115
// TopLevel ...
104116
#[derive(Debug, Deserialize, Serialize, PartialEq)]
105117
pub struct TopLevel {

test/ts/base64.xsd.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,18 @@ export class MyType10 {
5353
Title: MyType4;
5454
}
5555

56+
// MyType11 ...
57+
export class MyType11 {
58+
Option1?: number;
59+
Option2?: string;
60+
Option3?: MyType10;
61+
}
62+
5663
// TopLevel ...
5764
export class TopLevel extends MyType6 {
5865
CostAttr?: number;
5966
LastUpdatedAttr: string;
6067
Nested?: MyType7;
61-
MyType1: Uint8Array;
62-
MyType2: Array<MyType2>;
68+
MyType1?: Uint8Array;
69+
MyType2?: Array<MyType2>;
6370
}

test/xsd/base64.xsd

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@
7272
</sequence>
7373
</complexType>
7474

75+
<complexType name="MyType11">
76+
<choice>
77+
<element name="option1" type="int" />
78+
<element name="option2" type="string" />
79+
<element name="option3" type="here:MyType10" />
80+
</choice>
81+
</complexType>
82+
7583
<element name="TopLevel">
7684
<complexType>
7785
<complexContent>

xmlElement.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ func (opt *Options) OnElement(ele xml.StartElement, protoTree []interface{}) (er
7474
}
7575

7676
if opt.Choice.Len() > 0 {
77+
e.Optional = true
7778
e.Plural = e.Plural || opt.Choice.Peek().(*Choice).Plural
7879
}
7980

0 commit comments

Comments
 (0)