create_room.rs (2532B)
1 use arbitrary::Arbitrary; 2 use fuzzcheck::{DefaultMutator, Mutator}; 3 use fuzzcheck_serde_json_generator::json_value_mutator; 4 use serde::{Deserialize, Serialize}; 5 use serde_json::Value; 6 7 type ValueMutator = impl Mutator<Value>; 8 9 fn creation_content_skip(value: &Value) -> bool { 10 value.is_string() 11 || value.is_i64() 12 || value.is_boolean() 13 || value.is_array() 14 || value.is_null() 15 || value.is_u64() 16 } 17 18 fn room_version_skip(value: &Option<String>) -> bool { 19 if value.is_none() { 20 return true; 21 } 22 if let Some(ref value) = value { 23 if value.is_empty() { 24 return true; 25 } 26 } 27 false 28 } 29 30 #[derive(Clone, Serialize, Deserialize, Debug, Default, DefaultMutator)] 31 pub struct CreateRoomMagicJSON { 32 #[serde(skip_serializing_if = "creation_content_skip")] 33 #[field_mutator(ValueMutator = { json_value_mutator() })] 34 pub creation_content: Value, 35 //#[serde(skip_serializing_if = "Option::is_none")] 36 // Required for more fuzzing results 37 pub initial_state: Vec<StateEventJSON>, 38 #[serde(skip_serializing_if = "Option::is_none")] 39 pub invite: Option<Vec<String>>, 40 // Due to https://github.com/matrix-org/synapse/issues/13512 41 //#[serde(skip_serializing_if = "Option::is_none")] 42 //pub invite_3pid: Option<Vec<Invite3pid>>, 43 #[serde(skip_serializing_if = "Option::is_none")] 44 pub is_direct: Option<bool>, 45 #[serde(skip_serializing_if = "Option::is_none")] 46 pub name: Option<String>, 47 #[serde(skip_serializing_if = "Option::is_none")] 48 pub preset: Option<String>, 49 // Disabled to have more fuzz results 50 //#[serde(skip_serializing_if = "Option::is_none")] 51 //pub room_alias_name: Option<String>, 52 // Disabled to have more fuzz results 53 //#[serde(skip_serializing_if = "room_version_skip")] 54 //pub room_version: Option<String>, 55 #[serde(skip_serializing_if = "Option::is_none")] 56 pub topic: Option<String>, 57 #[serde(skip_serializing_if = "Option::is_none")] 58 pub visibility: Option<String>, 59 } 60 61 #[derive(Clone, Serialize, Deserialize, Debug, DefaultMutator, Default, Arbitrary)] 62 pub struct Invite3pid { 63 pub address: String, 64 pub id_access_token: String, 65 pub id_server: String, 66 pub medium: String, 67 } 68 69 #[derive(Clone, Serialize, Deserialize, Debug, Default, DefaultMutator)] 70 pub struct StateEventJSON { 71 #[field_mutator(ValueMutator = {json_value_mutator()})] 72 pub content: Value, 73 #[serde(rename = "type")] 74 pub _type: String, 75 pub state_key: String, 76 }