matrix-fuzz

git clone git://archive.git.mtrnord.blog/MTRNord/matrix-fuzz.git
Log | Files | Refs | README | LICENSE

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 }