@@ -335,7 +335,15 @@ impl Serialize for ConciseMidTag<'_> {
335335 S : serde:: Serializer ,
336336 {
337337 let is_human_readable = serializer. is_human_readable ( ) ;
338- let mut map = serializer. serialize_map ( None ) ?;
338+ let len = map_len ! (
339+ self ,
340+ 2 + // tag-identity, triples
341+ self . extensions. as_ref( ) . map_or( 0 , |e| e. len( ) ) ,
342+ language,
343+ entities,
344+ linked_tags,
345+ ) ;
346+ let mut map = serializer. serialize_map ( Some ( len) ) ?;
339347
340348 if is_human_readable {
341349 if let Some ( language) = & self . language {
@@ -586,7 +594,8 @@ impl Serialize for TagIdentityMap<'_> {
586594 S : serde:: Serializer ,
587595 {
588596 let is_human_readable = serializer. is_human_readable ( ) ;
589- let mut map = serializer. serialize_map ( None ) ?;
597+ let len = map_len ! ( self , 1 , tag_version) ;
598+ let mut map = serializer. serialize_map ( Some ( len) ) ?;
590599
591600 if is_human_readable {
592601 map. serialize_entry ( "tag-id" , & self . tag_id ) ?;
@@ -880,7 +889,13 @@ impl Serialize for ComidEntityMap<'_> {
880889 S : serde:: Serializer ,
881890 {
882891 let is_human_readable = serializer. is_human_readable ( ) ;
883- let mut map = serializer. serialize_map ( None ) ?;
892+ let len = map_len ! (
893+ self ,
894+ 2 + // entity-name, role
895+ self . extensions. as_ref( ) . map_or( 0 , |e| e. len( ) ) ,
896+ reg_id,
897+ ) ;
898+ let mut map = serializer. serialize_map ( Some ( len) ) ?;
884899
885900 if is_human_readable {
886901 map. serialize_entry ( "entity-name" , & self . entity_name ) ?;
@@ -1203,7 +1218,7 @@ impl Serialize for LinkedTagMap<'_> {
12031218 S : serde:: Serializer ,
12041219 {
12051220 let is_human_readable = serializer. is_human_readable ( ) ;
1206- let mut map = serializer. serialize_map ( None ) ?;
1221+ let mut map = serializer. serialize_map ( Some ( 2 ) ) ?;
12071222
12081223 if is_human_readable {
12091224 map. serialize_entry ( "linked-tag-id" , & self . linked_tag_id ) ?;
@@ -1450,9 +1465,15 @@ impl Serialize for TriplesMap<'_> {
14501465 let len = map_len ! (
14511466 self ,
14521467 0 + self . extensions. as_ref( ) . map_or( 0 , |e| e. len( ) ) ,
1453- reference_triples, endorsed_triples, identity_triples, attest_key_triples,
1454- dependency_triples, membership_triples, coswid_triples,
1455- conditional_endorsement_triples, conditional_endorsement_series_triples,
1468+ reference_triples,
1469+ endorsed_triples,
1470+ identity_triples,
1471+ attest_key_triples,
1472+ dependency_triples,
1473+ membership_triples,
1474+ coswid_triples,
1475+ conditional_endorsement_triples,
1476+ conditional_endorsement_series_triples,
14561477 ) ;
14571478 let mut map = serializer. serialize_map ( Some ( len) ) ?;
14581479
@@ -2043,7 +2064,7 @@ mod tests {
20432064 ciborium:: into_writer ( & entity_map, & mut actual_cbor) . unwrap ( ) ;
20442065
20452066 let expected_cbor: Vec < u8 > = vec ! [
2046- 0xbf , // map(indef )
2067+ 0xa4 , // map(4 )
20472068 0x00 , // key: 0 [entity-name]
20482069 0x63 , // value: tstr(3)
20492070 0x66 , 0x6f , 0x6f , // "foo"
@@ -2060,7 +2081,6 @@ mod tests {
20602081 0x6a , // value: tstr(10)
20612082 0x74 , 0x65 , 0x73 , 0x74 , 0x20 , 0x76 , 0x61 , 0x6c , // "test val"
20622083 0x75 , 0x65 , // "ue"
2063- 0xff , // break
20642084 ] ;
20652085
20662086 assert_eq ! ( actual_cbor, expected_cbor) ;
@@ -2091,13 +2111,12 @@ mod tests {
20912111 ciborium:: into_writer ( & tag_identity, & mut actual_cbor) . unwrap ( ) ;
20922112
20932113 let expected_cbor: Vec < u8 > = vec ! [
2094- 0xbf , // map(indef )
2114+ 0xa2 , // map(2 )
20952115 0x00 , // key: 0 [tag-id]
20962116 0x63 , // value: tstr(3)
20972117 0x66 , 0x6f , 0x6f , // "foo"
20982118 0x01 , // key: 1 [tag-version]
20992119 0x01 , // value: 1
2100- 0xff ,
21012120 ] ;
21022121
21032122 assert_eq ! ( actual_cbor, expected_cbor) ;
@@ -2173,14 +2192,13 @@ mod tests {
21732192 ciborium:: into_writer ( & linked_tag_map, & mut actual_cbor) . unwrap ( ) ;
21742193
21752194 let expected_cbor: Vec < u8 > = vec ! [
2176- 0xbf , // map(indef )
2195+ 0xa2 , // map(2 )
21772196 0x00 , // key: 0 [linked-tag-id]
21782197 0x50 , // value: bstr(16)
21792198 0x55 , 0x0e , 0x84 , 0x00 , 0xe2 , 0x9b , 0x41 , 0xd4 ,
21802199 0xa7 , 0x16 , 0x44 , 0x66 , 0x55 , 0x44 , 0x00 , 0x00 ,
21812200 0x01 , // key: 1 [tag-rel]
21822201 0x01 , // value: 1 [replaces]
2183- 0xff , // break
21842202 ] ;
21852203
21862204 assert_eq ! ( actual_cbor, expected_cbor) ;
@@ -2297,51 +2315,44 @@ mod tests {
22972315 0x00 , // key: 0 [reference-triples]
22982316 0x81 , // value: array(1)
22992317 0x82 , // [0]array(2) [reference-triples-record]
2300- 0xbf , // [0]map(indef ) [ref-env]
2318+ 0xa1 , // [0]map(1 ) [ref-env]
23012319 0x01 , // key: 1 [instance]
23022320 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23032321 0x43 , // bstr(3)
23042322 0x01 , 0x02 , 0x03 ,
2305- 0xff , // break
23062323 0x81 , // [1]array(1) [rev-claims]
2307- 0xbf , // [0]map(indef ) [measurement-values-map]
2324+ 0xa1 , // [0]map(1 ) [measurement-values-map]
23082325 0x01 , // key: 1 [mval]
2309- 0xbf , // value: map(indef )
2326+ 0xa1 , // value: map(1 )
23102327 0x01 , // key: 1 [svn]
23112328 0x01 , // value: 1
2312- 0xff , // break
2313- 0xff , // break
23142329 0x01 , // key: 1 [endorsement-triples]
23152330 0x81 , // value: array(1)
23162331 0x82 , // [0]array(2) [endorsed-triples-record]
2317- 0xbf , // [0]map(indef ) [condition]
2332+ 0xa1 , // [0]map(1 ) [condition]
23182333 0x01 , // key: 1 [instance]
23192334 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23202335 0x43 , // bstr(3)
23212336 0x01 , 0x02 , 0x03 ,
2322- 0xff , // break
23232337 0x81 , // [1]array(1) [endorsement]
2324- 0xbf , // [0]map(indef ) [measurement-values-map]
2338+ 0xa1 , // [0]map(1 ) [measurement-values-map]
23252339 0x01 , // key: 1 [mval]
2326- 0xbf , // value: map(indef )
2340+ 0xa1 , // value: map(1 )
23272341 0x01 , // key: 1 [svn]
23282342 0x01 , // value: 1
2329- 0xff , // break
2330- 0xff , // break
23312343 0x02 , // key: 2 [identity-triples]
23322344 0x81 , // value: array(1)
23332345 0x83 , // [0]array(3) [identity-triple-record]
2334- 0xbf , // [0]map(indef ) [environment]
2346+ 0xa1 , // [0]map(1 ) [environment]
23352347 0x01 , // key: 1 [instance]
23362348 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23372349 0x43 , // bstr(3)
23382350 0x01 , 0x02 , 0x03 ,
2339- 0xff , // break
23402351 0x81 , // [1]array(1) [key_list]
23412352 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23422353 0x43 , // bstr(3)
23432354 0x04 , 0x05 , 0x06 ,
2344- 0xbf , // [2]map(indef ) [conditions]
2355+ 0xa2 , // [2]map(2 ) [conditions]
23452356 0x00 , // key: 0 [mkey]
23462357 0x63 , // value: tstr(3)
23472358 0x66 , 0x6f , 0x6f , // "foo"
@@ -2350,21 +2361,19 @@ mod tests {
23502361 0xd9 , 0x02 , 0x30 , // [0]tag(560) [tagged-bytes]
23512362 0x43 , // bstr(3)
23522363 0x04 , 0x05 , 0x06 ,
2353- 0xff , // break
23542364 0x03 , // key: 3 [attest-key-triples]
23552365 0x81 , // value: array(1)
23562366 0x83 , // [0]array(3) [attest-key-triple-record]
2357- 0xbf , // [0]map(indef ) [environment]
2367+ 0xa1 , // [0]map(1 ) [environment]
23582368 0x01 , // key: 1 [instance]
23592369 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23602370 0x43 , // bstr(3)
23612371 0x01 , 0x02 , 0x03 ,
2362- 0xff , // break
23632372 0x81 , // [1]array(1) [key_list]
23642373 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23652374 0x43 , // bstr(3)
23662375 0x04 , 0x05 , 0x06 ,
2367- 0xbf , // [2]map(indef ) [conditions]
2376+ 0xa2 , // [2]map(2 ) [conditions]
23682377 0x00 , // key: 0 [mkey]
23692378 0x63 , // value: tstr(3)
23702379 0x66 , 0x6f , 0x6f , // "foo"
@@ -2373,116 +2382,99 @@ mod tests {
23732382 0xd9 , 0x02 , 0x30 , // [0]tag(560) [tagged-bytes]
23742383 0x43 , // bstr(3)
23752384 0x04 , 0x05 , 0x06 ,
2376- 0xff , // break
23772385 0x04 , // key: 4 [dependency-triples]
23782386 0x81 , // value: array(1)
23792387 0x82 , // [0]array(2) [domain-dependency-triple-record]
23802388 0xd8 , 0x6f , // [0]tag(111) [oid]
23812389 0x43 , // bstr(3)
23822390 0x2a , 0x03 , 0x04 ,
23832391 0x81 , // [1]array(1)
2384- 0xbf , // [1]map(indef ) [environment-map]
2392+ 0xa1 , // [1]map(1 ) [environment-map]
23852393 0x01 , // key: 1 [instance]
23862394 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
23872395 0x43 , // bstr(3)
23882396 0x01 , 0x02 , 0x03 ,
2389- 0xff , // break
23902397 0x05 , // key: 5 [membership-triples]
23912398 0x81 , // value: array(1)
23922399 0x82 , // [0]array(2) [domain-membership-triple-record]
23932400 0xd8 , 0x6f , // [0]tag(111) [oid]
23942401 0x43 , // bstr(3)
23952402 0x2a , 0x03 , 0x04 ,
23962403 0x81 , // [1]array(1)
2397- 0xbf , // [0]map(indef ) [environment-map]
2404+ 0xa1 , // [0]map(1 ) [environment-map]
23982405 0x01 , // key: 1 [instance]
23992406 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
24002407 0x43 , // bstr(3)
24012408 0x01 , 0x02 , 0x03 ,
2402- 0xff , // break
24032409 0x06 , // key: 6 [coswid-triples]
24042410 0x81 , // value: array(1)
24052411 0x82 , // [0]array(2) [coswid-triple-record]
2406- 0xbf , // [0]map(indef ) [environment-map]
2412+ 0xa1 , // [0]map(1 ) [environment-map]
24072413 0x01 , // key: 1 [instance]
24082414 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
24092415 0x43 , // bstr(3)
24102416 0x01 , 0x02 , 0x03 ,
2411- 0xff , // break
24122417 0x81 , // [1]array(1)
24132418 0x63 , // [0]tstr(3)
24142419 0x62 , 0x61 , 0x72 , // "bar"
24152420 0x08 , // key: 8 [conditional-endorsement-series-triples]
24162421 0x81 , // value: array(1)
24172422 0x82 , // [0]array(2) [conditional-endorsement-series-triple-record]
24182423 0x82 , // [0]array(2) [stateful-environment-record]
2419- 0xbf , // [0]map(indef ) [environment]
2424+ 0xa1 , // [0]map(1 ) [environment]
24202425 0x01 , // key: 1 [instance]
24212426 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
24222427 0x43 , // bstr(3)
24232428 0x01 , 0x02 , 0x03 ,
2424- 0xff , // break
24252429 0x81 , // [1]array(1) [claims_list]
2426- 0xbf , // [0]map(indef ) [measurement-map]
2430+ 0xa1 , // [0]map(1 ) [measurement-map]
24272431 0x01 , // key: 1 [mval]
2428- 0xbf , // value: map(indef ) [measurement-values-map]
2432+ 0xa1 , // value: map(1 ) [measurement-values-map]
24292433 0x01 , // key: 1 [svn]
24302434 0x01 , // value: 1
2431- 0xff , // break
2432- 0xff , // break
24332435 0x81 , // [1]array(1) [series]
24342436 0x82 , // [0]array(2) [conditional-series-record]
24352437 0x81 , // [0]array(1) [selection]
2436- 0xbf , // [0]map(indef ) [measurement-map]
2438+ 0xa1 , // [0]map(1 ) [measurement-map]
24372439 0x01 , // key: 1 [mval]
2438- 0xbf , // value: map(indef ) [measurement-values-map]
2440+ 0xa1 , // value: map(1 ) [measurement-values-map]
24392441 0x01 , // key: 1 [svn]
24402442 0x01 , // value: 1
2441- 0xff , // break
2442- 0xff , // break
24432443 0x81 , // [1]array(1) [addition]
2444- 0xbf , // [0]map(indef ) [measurement-map]
2444+ 0xa1 , // [0]map(1 ) [measurement-map]
24452445 0x01 , // key: 1 [mval]
2446- 0xbf , // value: map(indef ) [measurement-values-map]
2446+ 0xa1 , // value: map(1 ) [measurement-values-map]
24472447 0x01 , // key: 1 [svn]
24482448 0x01 , // value: 1
2449- 0xff , // break
2450- 0xff , // break
24512449 0x0a , // key: 10 [conditional-endorsement-triples]
24522450 0x81 , // value: array(1)
24532451 0x82 , // [0]array(2) [conditional-endorsement-triple-record]
24542452 0x81 , // [0]array(1) [conditions]
24552453 0x82 , // [0]array(2) [stateful-environment-record]
2456- 0xbf , // [0]map(indef ) [environment]
2454+ 0xa1 , // [0]map(1 ) [environment]
24572455 0x01 , // key: 1 [instance]
24582456 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
24592457 0x43 , // bstr(3)
24602458 0x01 , 0x02 , 0x03 ,
2461- 0xff , // break
24622459 0x81 , // [1]array(1) [claims-list]
2463- 0xbf , // [0]map(indef ) [measurement-map]
2460+ 0xa1 , // [0]map(1 ) [measurement-map]
24642461 0x01 , // key: 1 [mval]
2465- 0xbf , // value: map(indef ) [measurement-values-map]
2462+ 0xa1 , // value: map(1 ) [measurement-values-map]
24662463 0x01 , // key: 1 [svn]
24672464 0x01 , // value: 1
2468- 0xff , // break
2469- 0xff , // break
24702465 0x81 , // [1]array(1) [endorsements]
24712466 0x82 , // [0]array(2) [endorsed-triple-record]
2472- 0xbf , // [0]map(indef ) [condition]
2467+ 0xa1 , // [0]map(1 ) [condition]
24732468 0x01 , // key: 1 [instance]
24742469 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes]
24752470 0x43 , // bstr(3)
24762471 0x01 , 0x02 , 0x03 ,
2477- 0xff , // break
24782472 0x81 , // [1]array(1) [endorsement]
2479- 0xbf , // [0]map(indef ) [measurement-map]
2473+ 0xa1 , // [0]map(1 ) [measurement-map]
24802474 0x01 , // key: 1 [mval]
2481- 0xbf , // value: map(indef ) [measurement-values-map]
2475+ 0xa1 , // value: map(1 ) [measurement-values-map]
24822476 0x01 , // key: 1 [svn]
24832477 0x01 , // value: 1
2484- 0xff , // break
2485- 0xff , // break
24862478 0x19 , 0x05 , 0x39 , // key: 1337 [extension(1337)]
24872479 0xf5 , // value: true
24882480 ] ;
@@ -2558,57 +2550,50 @@ mod tests {
25582550 ciborium:: into_writer ( & comid, & mut actual_cbor) . unwrap ( ) ;
25592551
25602552 let expected_cbor: Vec < u8 > = vec ! [
2561- 0xbf , // map(indef ) [concise-mid-tag]
2553+ 0xa6 , // map(6 ) [concise-mid-tag]
25622554 0x00 , // key: 0 [language]
25632555 0x65 , // value: tstr(5)
25642556 0x65 , 0x6e , 0x2d , 0x47 , 0x42 , // "en-GB"
25652557 0x01 , // key: 1 [tag-identity]
2566- 0xbf , // value: map(indef ) [tag-identity-map]
2558+ 0xa1 , // value: map(1 ) [tag-identity-map]
25672559 0x00 , // key: 0 [tag-id]
25682560 0x63 , // value: tstr(3)
25692561 0x66 , 0x6f , 0x6f , // "foo"
2570- 0xff , // break
25712562 0x02 , // key: 2 [entities]
25722563 0x81 , // value: array(1)
2573- 0xbf , // [0]map(indef ) [comid-entity-map]
2564+ 0xa2 , // [0]map(2 ) [comid-entity-map]
25742565 0x00 , // key: 0 [entity-name]
25752566 0x63 , // value: tstr(3)
25762567 0x66 , 0x6f , 0x6f , // "foo"
25772568 0x02 , // key: 2 [role]
25782569 0x81 , // value: array(1)
25792570 0x01 , // [0]1 [creator]
2580- 0xff , // break
25812571 0x03 , // key: 3 [linked-tags]
25822572 0x81 , // value: array(0)
2583- 0xbf , // [0]map(indef ) [linked-tag-map]
2573+ 0xa2 , // [0]map(2 ) [linked-tag-map]
25842574 0x00 , // key: 0 [linked-tag-id]
25852575 0x63 , // value: tstr(3)
25862576 0x62 , 0x61 , 0x72 , // "bar"
25872577 0x01 , // key: 1 [tag-rel]
25882578 0x00 , // value: 0 [supplements]
2589- 0xff , // break
25902579 0x04 , // key: 4 [triples]
25912580 0xa1 , // value: map(1) [triples-map]
25922581 0x01 , // key: 1 [endorsed-triples]
25932582 0x81 , // value: array(1)
25942583 0x82 , // [0]array(2) [endorsed-triple-record]
2595- 0xbf , // [0]map(indef ) [environment-map]
2584+ 0xa1 , // [0]map(1 ) [environment-map]
25962585 0x01 , // key: 1 [instance]
25972586 0xd9 , 0x02 , 0x30 , // value: tag(560) [tagged-bytes[
25982587 0x43 , // bstr(3)
25992588 0x01 , 0x02 , 0x03 ,
2600- 0xff , // break
26012589 0x81 , // [1]array(1)
2602- 0xbf , // [0]map(indef ) [measurement-map]
2590+ 0xa1 , // [0]map(1 ) [measurement-map]
26032591 0x01 , // key: 1 [mval]
2604- 0xbf , // value: map(indef ) [measurement-values-map]
2592+ 0xa1 , // value: map(1 ) [measurement-values-map]
26052593 0x01 , // key: 1 [svn]
26062594 0x01 , // value: 1
2607- 0xff , // break
2608- 0xff , // break
26092595 0x19 , 0x05 , 0x39 , // key: 1337 [extension(1337)]
26102596 0xf4 , // value: false
2611- 0xff , // break
26122597 ] ;
26132598
26142599 assert_eq ! ( actual_cbor, expected_cbor) ;
0 commit comments