A photo manager for VRChat.
1use serde::ser::{Serialize, SerializeStruct, Serializer}; 2 3#[derive(Clone)] 4pub struct World { 5 id: String, 6 name: String, 7 author: String, 8 author_id: String, 9 desc: String, 10 img: String, 11 max_users: u64, 12 visits: u64, 13 favourites: u64, 14 tags: Vec<String>, 15 found: bool, 16} 17 18impl World { 19 pub fn new(world_id: String) -> World { 20 println!("Fetching world data for {}", &world_id); 21 22 let mut world = World { 23 id: world_id.clone(), 24 name: "".into(), 25 author: "".into(), 26 author_id: "".into(), 27 desc: "".into(), 28 img: "".into(), 29 max_users: 0, 30 visits: 0, 31 favourites: 0, 32 tags: vec!["".into()], 33 found: false, 34 }; 35 36 let client = reqwest::blocking::Client::new(); 37 38 let world_data = client 39 .get(format!("https://api.vrchat.cloud/api/1/worlds/{}", world_id)) 40 .header("User-Agent", "VRChat-Photo-Manager-Rust/0.0.1") 41 .send() 42 .unwrap(); 43 44 if world_data.status() != 200{ return world; } 45 world.found = true; 46 47 let world_data = world_data.text().unwrap(); 48 let world_data: serde_json::Value = serde_json::from_str(&world_data).unwrap(); 49 50 world.name = world_data["name"].as_str().unwrap().to_owned(); 51 world.author = world_data["authorName"].as_str().unwrap().to_owned(); 52 world.author_id = world_data["authorId"].as_str().unwrap().to_owned(); 53 world.desc = world_data["description"].as_str().unwrap().to_owned(); 54 world.img = world_data["imageUrl"].as_str().unwrap().to_owned(); 55 world.tags = world_data["tags"].as_array().unwrap().clone().iter() 56 .map(| item | item.as_str().unwrap().to_owned()) 57 .collect(); 58 world.visits = world_data["visits"].as_u64().unwrap(); 59 world.favourites = world_data["favorites"].as_u64().unwrap(); 60 world.max_users = world_data["capacity"].as_u64().unwrap(); 61 62 println!("Fetched world data for {}", &world_id); 63 world 64 } 65} 66 67impl Serialize for World { 68 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 69 where 70 S: Serializer, 71 { 72 let mut s = serializer.serialize_struct("World", 7)?; 73 s.serialize_field("id", &self.id)?; 74 s.serialize_field("name", &self.name)?; 75 s.serialize_field("author", &self.author)?; 76 s.serialize_field("authorId", &self.author_id)?; 77 s.serialize_field("desc", &self.desc)?; 78 s.serialize_field("img", &self.img)?; 79 s.serialize_field("maxUsers", &self.max_users)?; 80 s.serialize_field("visits", &self.visits)?; 81 s.serialize_field("favourites", &self.favourites)?; 82 s.serialize_field("tags", &self.tags)?; 83 s.serialize_field("found", &self.found)?; 84 85 s.end() 86 } 87}