mirror of
				https://github.com/serde-rs/serde.git
				synced 2025-11-04 07:24:31 +00:00 
			
		
		
		
	Merge pull request #834 from serde-rs/easy
Deserialize impls for &str and &[u8]
This commit is contained in:
		
						commit
						8c3e72f2c8
					
				@ -305,6 +305,71 @@ impl<'de> Deserialize<'de> for String {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
///////////////////////////////////////////////////////////////////////////////
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct StrVisitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'a> Visitor<'a> for StrVisitor {
 | 
				
			||||||
 | 
					    type Value = &'a str;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
 | 
				
			||||||
 | 
					        formatter.write_str("a borrowed string")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn visit_borrowed_str<E>(self, v: &'a str) -> Result<Self::Value, E>
 | 
				
			||||||
 | 
					        where E: Error
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Ok(v) // so easy
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn visit_borrowed_bytes<E>(self, v: &'a [u8]) -> Result<Self::Value, E>
 | 
				
			||||||
 | 
					        where E: Error
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        str::from_utf8(v)
 | 
				
			||||||
 | 
					            .map_err(|_| Error::invalid_value(Unexpected::Bytes(v), &self))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'a> Deserialize<'a> for &'a str {
 | 
				
			||||||
 | 
					    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
				
			||||||
 | 
					        where D: Deserializer<'a>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        deserializer.deserialize_str(StrVisitor)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct BytesVisitor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'a> Visitor<'a> for BytesVisitor {
 | 
				
			||||||
 | 
					    type Value = &'a [u8];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
 | 
				
			||||||
 | 
					        formatter.write_str("a borrowed byte array")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn visit_borrowed_bytes<E>(self, v: &'a [u8]) -> Result<Self::Value, E>
 | 
				
			||||||
 | 
					        where E: Error
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Ok(v)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn visit_borrowed_str<E>(self, v: &'a str) -> Result<Self::Value, E>
 | 
				
			||||||
 | 
					        where E: Error
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Ok(v.as_bytes())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<'a> Deserialize<'a> for &'a [u8] {
 | 
				
			||||||
 | 
					    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
				
			||||||
 | 
					        where D: Deserializer<'a>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        deserializer.deserialize_bytes(BytesVisitor)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					///////////////////////////////////////////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(all(feature = "std", feature="unstable"))]
 | 
					#[cfg(all(feature = "std", feature="unstable"))]
 | 
				
			||||||
impl<'de> Deserialize<'de> for Box<CStr> {
 | 
					impl<'de> Deserialize<'de> for Box<CStr> {
 | 
				
			||||||
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
					    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user