mirror of
https://github.com/vlang/v.git
synced 2025-09-10 07:47:20 -04:00
x.json2: support @[skip] as well (#22077)
This commit is contained in:
parent
c8dc145468
commit
4188deb96d
@ -165,6 +165,9 @@ fn decode_struct[T](_ T, res map[string]Any) !T {
|
|||||||
mut json_name := field.name
|
mut json_name := field.name
|
||||||
|
|
||||||
for attr in field.attrs {
|
for attr in field.attrs {
|
||||||
|
if attr.contains('skip') {
|
||||||
|
skip_field = true
|
||||||
|
}
|
||||||
if attr.contains('json: ') {
|
if attr.contains('json: ') {
|
||||||
json_name = attr.replace('json: ', '')
|
json_name = attr.replace('json: ', '')
|
||||||
if json_name == '-' {
|
if json_name == '-' {
|
||||||
|
@ -200,6 +200,9 @@ fn (e &Encoder) encode_struct[U](val U, level int, mut buf []u8) ! {
|
|||||||
$for field in U.fields {
|
$for field in U.fields {
|
||||||
mut @continue := false
|
mut @continue := false
|
||||||
for attr in field.attrs {
|
for attr in field.attrs {
|
||||||
|
if attr.contains('skip') {
|
||||||
|
@continue = true
|
||||||
|
}
|
||||||
if attr.contains('json: ') {
|
if attr.contains('json: ') {
|
||||||
if attr.replace('json: ', '') == '-' {
|
if attr.replace('json: ', '') == '-' {
|
||||||
@continue = true
|
@continue = true
|
||||||
@ -227,6 +230,9 @@ fn (e &Encoder) encode_struct[U](val U, level int, mut buf []u8) ! {
|
|||||||
mut json_name := ''
|
mut json_name := ''
|
||||||
|
|
||||||
for attr in field.attrs {
|
for attr in field.attrs {
|
||||||
|
if attr.contains('skip') {
|
||||||
|
ignore_field = true
|
||||||
|
}
|
||||||
if attr.contains('json: ') {
|
if attr.contains('json: ') {
|
||||||
json_name = attr.replace('json: ', '')
|
json_name = attr.replace('json: ', '')
|
||||||
if json_name == '-' {
|
if json_name == '-' {
|
||||||
|
@ -73,6 +73,22 @@ mut:
|
|||||||
val map[string]string @[json: '-']
|
val map[string]string @[json: '-']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct StructTypeSkippedFields5[T] {
|
||||||
|
mut:
|
||||||
|
val T @[skip]
|
||||||
|
val1 T @[skip]
|
||||||
|
val2 T @[skip]
|
||||||
|
val3 T @[skip]
|
||||||
|
}
|
||||||
|
|
||||||
|
struct StructTypeSkippedFields6[T] {
|
||||||
|
mut:
|
||||||
|
val T
|
||||||
|
val1 T @[skip]
|
||||||
|
val2 T
|
||||||
|
val3 T @[skip]
|
||||||
|
}
|
||||||
|
|
||||||
fn test_types() {
|
fn test_types() {
|
||||||
assert json.decode[StructType[string]]('{"val": ""}')!.val == ''
|
assert json.decode[StructType[string]]('{"val": ""}')!.val == ''
|
||||||
assert json.decode[StructType[string]]('{"val": "0"}')!.val == '0'
|
assert json.decode[StructType[string]]('{"val": "0"}')!.val == '0'
|
||||||
@ -188,4 +204,22 @@ fn test_skipped_fields() {
|
|||||||
} else {
|
} else {
|
||||||
assert false
|
assert false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if x := json.decode[StructTypeSkippedFields5[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
|
||||||
|
assert x.val == 0
|
||||||
|
assert x.val1 == 0
|
||||||
|
assert x.val2 == 0
|
||||||
|
assert x.val3 == 0
|
||||||
|
} else {
|
||||||
|
assert false
|
||||||
|
}
|
||||||
|
|
||||||
|
if x := json.decode[StructTypeSkippedFields6[int]]('{"val":10,"val1":10,"val2":10,"val3":10}') {
|
||||||
|
assert x.val == 10
|
||||||
|
assert x.val1 == 0
|
||||||
|
assert x.val2 == 10
|
||||||
|
assert x.val3 == 0
|
||||||
|
} else {
|
||||||
|
assert false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,14 @@ mut:
|
|||||||
val3 time.Time @[json: '-']
|
val3 time.Time @[json: '-']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct StructTypeSkippedFields9 {
|
||||||
|
mut:
|
||||||
|
val string
|
||||||
|
val1 i64 @[skip]
|
||||||
|
val2 f64
|
||||||
|
val3 time.Time @[skip]
|
||||||
|
}
|
||||||
|
|
||||||
fn test_encode_struct_skipped_fields() {
|
fn test_encode_struct_skipped_fields() {
|
||||||
assert json.encode(StructTypeSkippedFields[string]{
|
assert json.encode(StructTypeSkippedFields[string]{
|
||||||
val: 'string_val'
|
val: 'string_val'
|
||||||
@ -131,4 +139,10 @@ fn test_encode_struct_skipped_fields() {
|
|||||||
val1: 1
|
val1: 1
|
||||||
val2: 1.0
|
val2: 1.0
|
||||||
}) == '{"val":"string_val","val2":1.0}'
|
}) == '{"val":"string_val","val2":1.0}'
|
||||||
|
|
||||||
|
assert json.encode(StructTypeSkippedFields9{
|
||||||
|
val: 'string_val'
|
||||||
|
val1: 1
|
||||||
|
val2: 1.0
|
||||||
|
}) == '{"val":"string_val","val2":1.0}'
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user