feat(wpcarro/rust): Include std::fmt::Display example
Gotta know how to `to_string` things Change-Id: I259ef61ecaf6ae7fabe0b3d211706ba5f429b3a7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6057 Reviewed-by: wpcarro <wpcarro@gmail.com> Autosubmit: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI
This commit is contained in:
		
							parent
							
								
									783e1190cd
								
							
						
					
					
						commit
						4732603a42
					
				
					 6 changed files with 123 additions and 50 deletions
				
			
		
							
								
								
									
										81
									
								
								users/wpcarro/scratch/rust/src/json/mod.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								users/wpcarro/scratch/rust/src/json/mod.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,81 @@
 | 
			
		|||
use serde::{Deserialize, Serialize};
 | 
			
		||||
use serde_json::{json, Value};
 | 
			
		||||
 | 
			
		||||
// From the serde_json docs:
 | 
			
		||||
//
 | 
			
		||||
// > There are three common ways that you might find yourself needing to work
 | 
			
		||||
// > with JSON data in Rust.
 | 
			
		||||
// >
 | 
			
		||||
// > 1. As text data. An unprocessed string of JSON data that you receive on an
 | 
			
		||||
// >    HTTP endpoint, read from a file, or prepare to send to a remote server.
 | 
			
		||||
// > 2. As an untyped or loosely typed representation. Maybe you want to check
 | 
			
		||||
// >    that some JSON data is valid before passing it on, but without knowing
 | 
			
		||||
// >    the structure of what it contains. Or you want to do very basic
 | 
			
		||||
// >    manipulations like insert a key in a particular spot.
 | 
			
		||||
// > 3. As a strongly typed Rust data structure. When you expect all or most of
 | 
			
		||||
// >    your data to conform to a particular structure and want to get real work
 | 
			
		||||
// >    done without JSON’s loosey-goosey nature tripping you up.
 | 
			
		||||
//
 | 
			
		||||
// So let's take a look at all three...
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Types
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize, Debug)]
 | 
			
		||||
struct Person {
 | 
			
		||||
    fname: String,
 | 
			
		||||
    lname: String,
 | 
			
		||||
    age: u8,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Functions
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// 1) Reading/writing from/to plain text.
 | 
			
		||||
//    TL;DR:
 | 
			
		||||
//    - read:  serde_json::from_str(data)
 | 
			
		||||
//    - write: x.to_string()
 | 
			
		||||
pub fn one() {
 | 
			
		||||
    let data = json!({
 | 
			
		||||
        "fname": "William",
 | 
			
		||||
        "lname": "Carroll",
 | 
			
		||||
        "age": 30,
 | 
			
		||||
    })
 | 
			
		||||
    .to_string();
 | 
			
		||||
 | 
			
		||||
    println!("result: {:?}", data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 2) Parse into a loosely typed representation; mutate it; serialize it back.
 | 
			
		||||
//    TL;DR:
 | 
			
		||||
//    - read:  serde_json::from_str(data)
 | 
			
		||||
//    - write: x.to_string()
 | 
			
		||||
pub fn two() {
 | 
			
		||||
    let data = r#"{"fname":"William","lname":"Carroll","age":30}"#;
 | 
			
		||||
 | 
			
		||||
    let mut parsed: Value = serde_json::from_str(data).unwrap();
 | 
			
		||||
    parsed["fname"] = json!("Norm");
 | 
			
		||||
    parsed["lname"] = json!("Macdonald");
 | 
			
		||||
    parsed["age"] = json!(61);
 | 
			
		||||
 | 
			
		||||
    let result = parsed.to_string();
 | 
			
		||||
    println!("result: {:?}", result);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 3) Parse into a strongly typed structure.
 | 
			
		||||
//    TL;DR:
 | 
			
		||||
//    - read:  serde_json::from_str(data)
 | 
			
		||||
//    - write: serde_json::to_string(x).unwrap()
 | 
			
		||||
pub fn three() {
 | 
			
		||||
    let data = r#"{"fname":"William","lname":"Carroll","age":30}"#;
 | 
			
		||||
 | 
			
		||||
    let mut read: Person = serde_json::from_str(data).unwrap();
 | 
			
		||||
    read.fname = "Norm".to_string();
 | 
			
		||||
    read.lname = "Macdonald".to_string();
 | 
			
		||||
    read.age = 61;
 | 
			
		||||
 | 
			
		||||
    let write = serde_json::to_string(&read).unwrap();
 | 
			
		||||
    println!("result: {:?}", write);
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue