@@ -321,37 +321,24 @@ impl Date {
321321
322322impl Primitive for Date {
323323 fn write ( self , buf : & mut Vec < u8 > ) {
324- write ! ( buf, "(D:{:04}" , self . year) . unwrap ( ) ;
325-
326- self . month
327- . and_then ( |month| {
328- write ! ( buf, "{:02}" , month) . unwrap ( ) ;
329- self . day
330- } )
331- . and_then ( |day| {
332- write ! ( buf, "{:02}" , day) . unwrap ( ) ;
333- self . hour
334- } )
335- . and_then ( |hour| {
336- write ! ( buf, "{:02}" , hour) . unwrap ( ) ;
337- self . minute
338- } )
339- . and_then ( |minute| {
340- write ! ( buf, "{:02}" , minute) . unwrap ( ) ;
341- self . second
342- } )
343- . and_then ( |second| {
344- write ! ( buf, "{:02}" , second) . unwrap ( ) ;
345- self . utc_offset_hour
346- } )
347- . map ( |utc_offset_hour| {
348- if utc_offset_hour == 0 && self . utc_offset_minute == 0 {
349- buf. push ( b'Z' ) ;
350- } else {
351- write ! ( buf, "{:+03}'{:02}" , utc_offset_hour, self . utc_offset_minute)
352- . unwrap ( ) ;
353- }
354- } ) ;
324+ buf. extend ( b"(D:" ) ;
325+
326+ ( || {
327+ write ! ( buf, "{:04}" , self . year) . unwrap ( ) ;
328+ write ! ( buf, "{:02}" , self . month?) . unwrap ( ) ;
329+ write ! ( buf, "{:02}" , self . day?) . unwrap ( ) ;
330+ write ! ( buf, "{:02}" , self . hour?) . unwrap ( ) ;
331+ write ! ( buf, "{:02}" , self . minute?) . unwrap ( ) ;
332+ write ! ( buf, "{:02}" , self . second?) . unwrap ( ) ;
333+ let utc_offset_hour = self . utc_offset_hour ?;
334+ if utc_offset_hour == 0 && self . utc_offset_minute == 0 {
335+ buf. push ( b'Z' ) ;
336+ } else {
337+ write ! ( buf, "{:+03}'{:02}" , utc_offset_hour, self . utc_offset_minute)
338+ . unwrap ( ) ;
339+ }
340+ Some ( ( ) )
341+ } ) ( ) ;
355342
356343 buf. push ( b')' ) ;
357344 }
@@ -463,6 +450,12 @@ impl<'a> Array<'a> {
463450 self . len
464451 }
465452
453+ /// Whether no items have been written so far.
454+ #[ inline]
455+ pub fn is_empty ( & self ) -> bool {
456+ self . len == 0
457+ }
458+
466459 /// Start writing an arbitrary item.
467460 #[ inline]
468461 pub fn push ( & mut self ) -> Obj < ' _ > {
@@ -543,6 +536,12 @@ where
543536 self . array . len ( )
544537 }
545538
539+ /// Whether no items have been written so far.
540+ #[ inline]
541+ pub fn is_empty ( & self ) -> bool {
542+ self . len ( ) == 0
543+ }
544+
546545 /// Write an item.
547546 #[ inline]
548547 pub fn item ( & mut self , value : T ) -> & mut Self
@@ -600,6 +599,12 @@ impl<'a> Dict<'a> {
600599 self . len
601600 }
602601
602+ /// Whether no pairs have been written so far.
603+ #[ inline]
604+ pub fn is_empty ( & self ) -> bool {
605+ self . len == 0
606+ }
607+
603608 /// Start writing a pair with an arbitrary value.
604609 #[ inline]
605610 pub fn insert ( & mut self , key : Name ) -> Obj < ' _ > {
@@ -691,6 +696,12 @@ where
691696 self . dict . len ( )
692697 }
693698
699+ /// Whether no pairs have been written so far.
700+ #[ inline]
701+ pub fn is_empty ( & self ) -> bool {
702+ self . len ( ) == 0
703+ }
704+
694705 /// Write a key-value pair.
695706 #[ inline]
696707 pub fn pair ( & mut self , key : Name , value : T ) -> & mut Self
0 commit comments