mirror of
https://github.com/vlang/v.git
synced 2025-09-14 15:02:33 +03:00
fix omitempty for options
This commit is contained in:
parent
613bf43883
commit
98ffa233ea
2 changed files with 27 additions and 15 deletions
|
@ -323,6 +323,19 @@ struct EncoderFieldInfo {
|
||||||
is_required bool
|
is_required bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn check_not_empty[T](val T) bool {
|
||||||
|
$if val is string {
|
||||||
|
if val == '' {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
} $else $if val is $int || val is $float {
|
||||||
|
if val == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
@[unsafe]
|
@[unsafe]
|
||||||
fn (mut encoder Encoder) encode_struct[T](val T) {
|
fn (mut encoder Encoder) encode_struct[T](val T) {
|
||||||
encoder.output << `{`
|
encoder.output << `{`
|
||||||
|
@ -384,21 +397,17 @@ fn (mut encoder Encoder) encode_struct[T](val T) {
|
||||||
} else {
|
} else {
|
||||||
value := val.$(field.name)
|
value := val.$(field.name)
|
||||||
|
|
||||||
if !field_info.is_required {
|
if field_info.is_omitempty {
|
||||||
$if value is $option {
|
$if value is $option {
|
||||||
if value == none {
|
write_field = check_not_empty(value)
|
||||||
write_field = false
|
} $else {
|
||||||
}
|
write_field = check_not_empty(value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if field_info.is_omitempty {
|
if !field_info.is_required {
|
||||||
$if value is string {
|
$if value is $option {
|
||||||
if value == '' {
|
if value == none {
|
||||||
write_field = false
|
|
||||||
}
|
|
||||||
} $else $if value is $int || value is $float {
|
|
||||||
if value == 0 {
|
|
||||||
write_field = false
|
write_field = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,10 +84,13 @@ struct PointerFields {
|
||||||
type PointerFieldsAlias = PointerFields
|
type PointerFieldsAlias = PointerFields
|
||||||
|
|
||||||
struct OmitFields {
|
struct OmitFields {
|
||||||
a ?bool @[omitempty]
|
a ?bool = none @[omitempty]
|
||||||
b string @[omitempty]
|
b string = '' @[omitempty]
|
||||||
c int @[omitempty]
|
c int = 0 @[omitempty]
|
||||||
d f64 @[omitempty]
|
d f64 = 0.0 @[omitempty]
|
||||||
|
e ?string = '' @[omitempty]
|
||||||
|
f ?int = 0 @[omitempty]
|
||||||
|
g ?f64 = 0.0 @[omitempty]
|
||||||
}
|
}
|
||||||
|
|
||||||
type OmitFieldsAlias = OmitFields
|
type OmitFieldsAlias = OmitFields
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue