mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +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
|
||||
}
|
||||
|
||||
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]
|
||||
fn (mut encoder Encoder) encode_struct[T](val T) {
|
||||
encoder.output << `{`
|
||||
|
@ -384,21 +397,17 @@ fn (mut encoder Encoder) encode_struct[T](val T) {
|
|||
} else {
|
||||
value := val.$(field.name)
|
||||
|
||||
if !field_info.is_required {
|
||||
if field_info.is_omitempty {
|
||||
$if value is $option {
|
||||
if value == none {
|
||||
write_field = false
|
||||
}
|
||||
write_field = check_not_empty(value)
|
||||
} $else {
|
||||
write_field = check_not_empty(value)
|
||||
}
|
||||
}
|
||||
|
||||
if field_info.is_omitempty {
|
||||
$if value is string {
|
||||
if value == '' {
|
||||
write_field = false
|
||||
}
|
||||
} $else $if value is $int || value is $float {
|
||||
if value == 0 {
|
||||
if !field_info.is_required {
|
||||
$if value is $option {
|
||||
if value == none {
|
||||
write_field = false
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,10 +84,13 @@ struct PointerFields {
|
|||
type PointerFieldsAlias = PointerFields
|
||||
|
||||
struct OmitFields {
|
||||
a ?bool @[omitempty]
|
||||
b string @[omitempty]
|
||||
c int @[omitempty]
|
||||
d f64 @[omitempty]
|
||||
a ?bool = none @[omitempty]
|
||||
b string = '' @[omitempty]
|
||||
c int = 0 @[omitempty]
|
||||
d f64 = 0.0 @[omitempty]
|
||||
e ?string = '' @[omitempty]
|
||||
f ?int = 0 @[omitempty]
|
||||
g ?f64 = 0.0 @[omitempty]
|
||||
}
|
||||
|
||||
type OmitFieldsAlias = OmitFields
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue