Closed
Description
This is an example of an error message I got with serde and serde_derive 0.8.20 on a recent nightly. As pasted here it doesn't look horrific, but it consists of massive lines of garbage and whitespace that wordwrap on the console to create a nonsense maelstrom.
Even if we accept that the error messages must be bad, I think we can do considerably better than this. This is scheduled to be stable with 1.15 in feb. Can we fix this up before?
$ cargo run -- create-local-job run-tc stable
Compiling cargobomb v0.1.0 (file:///home/ec2-user/cargobomb)
error[E0432]: unresolved import `serde::Serealize`
--> src/model.rs:17:13
|
17 | use serde::{Serealize, Deserialize};
| ^^^^^^^^^ no `Serealize` in the root. Did you mean to use `Serialize`?
error[E0277]: the trait bound `docker::Container: serde::Serialize` is not satisfied
--> <proc-macro source code>:1:506
|
1 | # [ allow ( non_upper_case_globals , unused_attributes , unused_qualifications ) ] const _IMPL_SERIALIZE_FOR_DockerJob : ( ) = { extern crate serde as _serde ; # [ automatically_derived ] impl _serde :: ser :: Serialize for DockerJob { fn serialize < __S > ( & self , _serializer : & mut __S ) -> :: std :: result :: Result < ( ) , __S :: Error > where __S : _serde :: ser :: Serializer { let mut __serde_state = try ! ( _serializer . serialize_struct ( "DockerJob" , 0 + 1 + 1 ) ) ; try ! ( _serializer . serialize_struct_elt ( & mut __serde_state , "id" , & self . id ) ) ; try ! ( _serializer . serialize_struct_elt ( & mut __serde_state , "state" , & self . state ) ) ; _serializer . serialize_struct_end ( __serde_state ) } } } ;
| ^^^^^^^^^^^^^^^^^^^^^ the trait `serde::Serialize` is not implemented for `docker::Container`
|
= note: required because of the requirements on the impl of `serde::Serialize` for `&docker::Container`
error[E0277]: the trait bound `docker::Container: serde::Deserialize` is not satisfied
--> <proc-macro source code>:1:1964
|
1 | # [ allow ( non_upper_case_globals , unused_attributes , unused_qualifications ) ] const _IMPL_DESERIALIZE_FOR_DockerJob : ( ) = { extern crate serde as _serde ; # [ automatically_derived ] impl _serde :: de :: Deserialize for DockerJob { fn deserialize < __D > ( deserializer : & mut __D ) -> :: std :: result :: Result < DockerJob , __D :: Error > where __D : _serde :: de :: Deserializer { # [ allow ( non_camel_case_types ) ] enum __Field { __field0 , __field1 , __ignore , } impl _serde :: de :: Deserialize for __Field { # [ inline ] fn deserialize < __D > ( deserializer : & mut __D ) -> :: std :: result :: Result < __Field , __D :: Error > where __D : _serde :: de :: Deserializer , { struct __FieldVisitor ; impl _serde :: de :: Visitor for __FieldVisitor { type Value = __Field ; fn visit_usize < __E > ( & mut self , value : usize ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { 0usize => { Ok ( __Field :: __field0 ) } 1usize => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } fn visit_str < __E > ( & mut self , value : & str ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { "id" => { Ok ( __Field :: __field0 ) } "state" => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } fn visit_bytes < __E > ( & mut self , value : & [ u8 ] ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { b"id" => { Ok ( __Field :: __field0 ) } b"state" => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } } deserializer . deserialize_struct_field ( __FieldVisitor ) } } struct __Visitor ; impl _serde :: de :: Visitor for __Visitor { type Value = DockerJob ; # [ inline ] fn visit_seq < __V > ( & mut self , mut visitor : __V ) -> :: std :: result :: Result < DockerJob , __V :: Error > where __V : _serde :: de :: SeqVisitor { let __field0 = match try ! ( visitor . visit :: < Container > ( ) ) { Some ( value ) => { value } , None => { try ! ( visitor . end ( ) ) ; return Err ( _serde :: de :: Error :: invalid_length ( 0usize ) ) ; } } ; let __field1 = match try ! ( visitor . visit :: < JobState > ( ) ) { Some ( value ) => { value } , None => { try ! ( visitor . end ( ) ) ; return Err ( _serde :: de :: Error :: invalid_length ( 1usize ) ) ; } } ; try ! ( visitor . end ( ) ) ; Ok ( DockerJob { id : __field0 , state : __field1 } ) } # [ inline ] fn visit_map < __V > ( & mut self , mut visitor : __V ) -> :: std :: result :: Result < DockerJob , __V :: Error > where __V : _serde :: de :: MapVisitor { let mut __field0 : Option < Container > = None ; let mut __field1 : Option < JobState > = None ; while let Some ( key ) = try ! ( visitor . visit_key :: < __Field > ( ) ) { match key { __Field :: __field0 => { if __field0 . is_some ( ) { return Err ( < __V :: Error as _serde :: de :: Error > :: duplicate_field ( "id" ) ) ; } __field0 = Some ( try ! ( visitor . visit_value :: < Container > ( ) ) ) ; } __Field :: __field1 => { if __field1 . is_some ( ) { return Err ( < __V :: Error as _serde :: de :: Error > :: duplicate_field ( "state" ) ) ; } __field1 = Some ( try ! ( visitor . visit_value :: < JobState > ( ) ) ) ; } _ => { let _ = try ! ( visitor . visit_value :: < _serde :: de :: impls :: IgnoredAny > ( ) ) ; } } } try ! ( visitor . end ( ) ) ; let __field0 = match __field0 { Some ( __field0 ) => __field0 , None => try ! ( visitor . missing_field ( "id" ) ) } ; let __field1 = match __field1 { Some ( __field1 ) => __field1 , None => try ! ( visitor . missing_field ( "state" ) ) } ; Ok ( DockerJob { id : __field0 , state : __field1 } ) } } const FIELDS : & 'static [ & 'static str ] = & [ "id" , "state" ] ; deserializer . deserialize_struct ( "DockerJob" , FIELDS , __Visitor ) } } } ;
| ^^^^^^ the trait `serde::Deserialize` is not implemented for `docker::Container`
error[E0277]: the trait bound `docker::Container: serde::Deserialize` is not satisfied
--> <proc-macro source code>:1:2970
|
1 | # [ allow ( non_upper_case_globals , unused_attributes , unused_qualifications ) ] const _IMPL_DESERIALIZE_FOR_DockerJob : ( ) = { extern crate serde as _serde ; # [ automatically_derived ] impl _serde :: de :: Deserialize for DockerJob { fn deserialize < __D > ( deserializer : & mut __D ) -> :: std :: result :: Result < DockerJob , __D :: Error > where __D : _serde :: de :: Deserializer { # [ allow ( non_camel_case_types ) ] enum __Field { __field0 , __field1 , __ignore , } impl _serde :: de :: Deserialize for __Field { # [ inline ] fn deserialize < __D > ( deserializer : & mut __D ) -> :: std :: result :: Result < __Field , __D :: Error > where __D : _serde :: de :: Deserializer , { struct __FieldVisitor ; impl _serde :: de :: Visitor for __FieldVisitor { type Value = __Field ; fn visit_usize < __E > ( & mut self , value : usize ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { 0usize => { Ok ( __Field :: __field0 ) } 1usize => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } fn visit_str < __E > ( & mut self , value : & str ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { "id" => { Ok ( __Field :: __field0 ) } "state" => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } fn visit_bytes < __E > ( & mut self , value : & [ u8 ] ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { b"id" => { Ok ( __Field :: __field0 ) } b"state" => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } } deserializer . deserialize_struct_field ( __FieldVisitor ) } } struct __Visitor ; impl _serde :: de :: Visitor for __Visitor { type Value = DockerJob ; # [ inline ] fn visit_seq < __V > ( & mut self , mut visitor : __V ) -> :: std :: result :: Result < DockerJob , __V :: Error > where __V : _serde :: de :: SeqVisitor { let __field0 = match try ! ( visitor . visit :: < Container > ( ) ) { Some ( value ) => { value } , None => { try ! ( visitor . end ( ) ) ; return Err ( _serde :: de :: Error :: invalid_length ( 0usize ) ) ; } } ; let __field1 = match try ! ( visitor . visit :: < JobState > ( ) ) { Some ( value ) => { value } , None => { try ! ( visitor . end ( ) ) ; return Err ( _serde :: de :: Error :: invalid_length ( 1usize ) ) ; } } ; try ! ( visitor . end ( ) ) ; Ok ( DockerJob { id : __field0 , state : __field1 } ) } # [ inline ] fn visit_map < __V > ( & mut self , mut visitor : __V ) -> :: std :: result :: Result < DockerJob , __V :: Error > where __V : _serde :: de :: MapVisitor { let mut __field0 : Option < Container > = None ; let mut __field1 : Option < JobState > = None ; while let Some ( key ) = try ! ( visitor . visit_key :: < __Field > ( ) ) { match key { __Field :: __field0 => { if __field0 . is_some ( ) { return Err ( < __V :: Error as _serde :: de :: Error > :: duplicate_field ( "id" ) ) ; } __field0 = Some ( try ! ( visitor . visit_value :: < Container > ( ) ) ) ; } __Field :: __field1 => { if __field1 . is_some ( ) { return Err ( < __V :: Error as _serde :: de :: Error > :: duplicate_field ( "state" ) ) ; } __field1 = Some ( try ! ( visitor . visit_value :: < JobState > ( ) ) ) ; } _ => { let _ = try ! ( visitor . visit_value :: < _serde :: de :: impls :: IgnoredAny > ( ) ) ; } } } try ! ( visitor . end ( ) ) ; let __field0 = match __field0 { Some ( __field0 ) => __field0 , None => try ! ( visitor . missing_field ( "id" ) ) } ; let __field1 = match __field1 { Some ( __field1 ) => __field1 , None => try ! ( visitor . missing_field ( "state" ) ) } ; Ok ( DockerJob { id : __field0 , state : __field1 } ) } } const FIELDS : & 'static [ & 'static str ] = & [ "id" , "state" ] ; deserializer . deserialize_struct ( "DockerJob" , FIELDS , __Visitor ) } } } ;
| ^^^^^^^^^^^^ the trait `serde::Deserialize` is not implemented for `docker::Container`
error[E0277]: the trait bound `docker::Container: serde::Deserialize` is not satisfied
--> <proc-macro source code>:1:3454
|
1 | # [ allow ( non_upper_case_globals , unused_attributes , unused_qualifications ) ] const _IMPL_DESERIALIZE_FOR_DockerJob : ( ) = { extern crate serde as _serde ; # [ automatically_derived ] impl _serde :: de :: Deserialize for DockerJob { fn deserialize < __D > ( deserializer : & mut __D ) -> :: std :: result :: Result < DockerJob , __D :: Error > where __D : _serde :: de :: Deserializer { # [ allow ( non_camel_case_types ) ] enum __Field { __field0 , __field1 , __ignore , } impl _serde :: de :: Deserialize for __Field { # [ inline ] fn deserialize < __D > ( deserializer : & mut __D ) -> :: std :: result :: Result < __Field , __D :: Error > where __D : _serde :: de :: Deserializer , { struct __FieldVisitor ; impl _serde :: de :: Visitor for __FieldVisitor { type Value = __Field ; fn visit_usize < __E > ( & mut self , value : usize ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { 0usize => { Ok ( __Field :: __field0 ) } 1usize => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } fn visit_str < __E > ( & mut self , value : & str ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { "id" => { Ok ( __Field :: __field0 ) } "state" => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } fn visit_bytes < __E > ( & mut self , value : & [ u8 ] ) -> :: std :: result :: Result < __Field , __E > where __E : _serde :: de :: Error { match value { b"id" => { Ok ( __Field :: __field0 ) } b"state" => { Ok ( __Field :: __field1 ) } _ => Ok ( __Field :: __ignore ) } } } deserializer . deserialize_struct_field ( __FieldVisitor ) } } struct __Visitor ; impl _serde :: de :: Visitor for __Visitor { type Value = DockerJob ; # [ inline ] fn visit_seq < __V > ( & mut self , mut visitor : __V ) -> :: std :: result :: Result < DockerJob , __V :: Error > where __V : _serde :: de :: SeqVisitor { let __field0 = match try ! ( visitor . visit :: < Container > ( ) ) { Some ( value ) => { value } , None => { try ! ( visitor . end ( ) ) ; return Err ( _serde :: de :: Error :: invalid_length ( 0usize ) ) ; } } ; let __field1 = match try ! ( visitor . visit :: < JobState > ( ) ) { Some ( value ) => { value } , None => { try ! ( visitor . end ( ) ) ; return Err ( _serde :: de :: Error :: invalid_length ( 1usize ) ) ; } } ; try ! ( visitor . end ( ) ) ; Ok ( DockerJob { id : __field0 , state : __field1 } ) } # [ inline ] fn visit_map < __V > ( & mut self , mut visitor : __V ) -> :: std :: result :: Result < DockerJob , __V :: Error > where __V : _serde :: de :: MapVisitor { let mut __field0 : Option < Container > = None ; let mut __field1 : Option < JobState > = None ; while let Some ( key ) = try ! ( visitor . visit_key :: < __Field > ( ) ) { match key { __Field :: __field0 => { if __field0 . is_some ( ) { return Err ( < __V :: Error as _serde :: de :: Error > :: duplicate_field ( "id" ) ) ; } __field0 = Some ( try ! ( visitor . visit_value :: < Container > ( ) ) ) ; } __Field :: __field1 => { if __field1 . is_some ( ) { return Err ( < __V :: Error as _serde :: de :: Error > :: duplicate_field ( "state" ) ) ; } __field1 = Some ( try ! ( visitor . visit_value :: < JobState > ( ) ) ) ; } _ => { let _ = try ! ( visitor . visit_value :: < _serde :: de :: impls :: IgnoredAny > ( ) ) ; } } } try ! ( visitor . end ( ) ) ; let __field0 = match __field0 { Some ( __field0 ) => __field0 , None => try ! ( visitor . missing_field ( "id" ) ) } ; let __field1 = match __field1 { Some ( __field1 ) => __field1 , None => try ! ( visitor . missing_field ( "state" ) ) } ; Ok ( DockerJob { id : __field0 , state : __field1 } ) } } const FIELDS : & 'static [ & 'static str ] = & [ "id" , "state" ] ; deserializer . deserialize_struct ( "DockerJob" , FIELDS , __Visitor ) } } } ;
| ^^^^^^^^^^^^^^ the trait `serde::Deserialize` is not implemented for `docker::Container`
error: aborting due to 4 previous errors