feat(tvix/serde): add newtype & tuple deserialisation
Only missing enums at this point, but they're a bit of a beast. Change-Id: I4ad47c034851f9a8794c81f39a5149a8ac1826e8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7716 Tested-by: BuildkiteCI Reviewed-by: flokli <flokli@flokli.de> Autosubmit: tazjin <tazjin@tvl.su>
This commit is contained in:
		
							parent
							
								
									0c17718dd1
								
							
						
					
					
						commit
						0e88eb83ef
					
				
					 2 changed files with 27 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -225,14 +225,14 @@ impl<'de> de::Deserializer<'de> for NixDeserializer {
 | 
			
		|||
    where
 | 
			
		||||
        V: de::Visitor<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        todo!("how to represent this?");
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
    where
 | 
			
		||||
        V: de::Visitor<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        todo!("how to represent this?");
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Note that this can not distinguish between a serialisation of
 | 
			
		||||
| 
						 | 
				
			
			@ -261,24 +261,24 @@ impl<'de> de::Deserializer<'de> for NixDeserializer {
 | 
			
		|||
 | 
			
		||||
    fn deserialize_unit_struct<V>(
 | 
			
		||||
        self,
 | 
			
		||||
        name: &'static str,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        visitor: V,
 | 
			
		||||
    ) -> Result<V::Value, Self::Error>
 | 
			
		||||
    where
 | 
			
		||||
        V: de::Visitor<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        todo!("how to represent this?");
 | 
			
		||||
        self.deserialize_unit(visitor)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn deserialize_newtype_struct<V>(
 | 
			
		||||
        self,
 | 
			
		||||
        name: &'static str,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        visitor: V,
 | 
			
		||||
    ) -> Result<V::Value, Self::Error>
 | 
			
		||||
    where
 | 
			
		||||
        V: de::Visitor<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        todo!("how to represent this?");
 | 
			
		||||
        visitor.visit_newtype_struct(self)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
| 
						 | 
				
			
			@ -296,23 +296,25 @@ impl<'de> de::Deserializer<'de> for NixDeserializer {
 | 
			
		|||
        Err(unexpected("list", &self.value))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
    fn deserialize_tuple<V>(self, _len: usize, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
    where
 | 
			
		||||
        V: de::Visitor<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        todo!()
 | 
			
		||||
        // just represent tuples as lists ...
 | 
			
		||||
        self.deserialize_seq(visitor)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn deserialize_tuple_struct<V>(
 | 
			
		||||
        self,
 | 
			
		||||
        name: &'static str,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        len: usize,
 | 
			
		||||
        visitor: V,
 | 
			
		||||
    ) -> Result<V::Value, Self::Error>
 | 
			
		||||
    where
 | 
			
		||||
        V: de::Visitor<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        todo!()
 | 
			
		||||
        // same as above
 | 
			
		||||
        self.deserialize_seq(visitor)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,3 +80,18 @@ fn deserialize_struct() {
 | 
			
		|||
        }
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn deserialize_newtype() {
 | 
			
		||||
    #[derive(Debug, Deserialize, PartialEq)]
 | 
			
		||||
    struct Number(usize);
 | 
			
		||||
 | 
			
		||||
    let result: Number = from_str("42").expect("should deserialize");
 | 
			
		||||
    assert_eq!(result, Number(42));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[test]
 | 
			
		||||
fn deserialize_tuple() {
 | 
			
		||||
    let result: (String, usize) = from_str(r#" [ "foo" 42 ] "#).expect("should deserialize");
 | 
			
		||||
    assert_eq!(result, ("foo".into(), 42));
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue