allow Entity to be deserialized with serde_json (#3873)
# Objective
- `serde_json` assumes that numbers being deserialized are either u64 or i64.
- `Entity` serializes and deserializes as a u32.
- Deserializing an `Entity` with `serde_json` fails with: `Error("invalid type: integer 10947, expected expected Entity"`
## Solution
- Implemented a visitor for u64 that allows an `Entity` to be deserialized in this case.
- While I was here, also fixed the redundant "expected expected Entity" in the error message
- Tested the change in a local project which now correctly deserializes `Entity` structs with `serde_json` when it couldn't before
			
			
This commit is contained in:
		
							parent
							
								
									75286b8540
								
							
						
					
					
						commit
						b13f238fc7
					
				| @ -25,7 +25,7 @@ impl<'de> Visitor<'de> for EntityVisitor { | ||||
|     type Value = Entity; | ||||
| 
 | ||||
|     fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { | ||||
|         formatter.write_str("expected Entity") | ||||
|         formatter.write_str("Entity") | ||||
|     } | ||||
| 
 | ||||
|     fn visit_u32<E>(self, v: u32) -> Result<Self::Value, E> | ||||
| @ -34,4 +34,11 @@ impl<'de> Visitor<'de> for EntityVisitor { | ||||
|     { | ||||
|         Ok(Entity::from_raw(v)) | ||||
|     } | ||||
| 
 | ||||
|     fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E> | ||||
|     where | ||||
|         E: serde::de::Error, | ||||
|     { | ||||
|         Ok(Entity::from_raw(v as u32)) | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Delphine
						Delphine