1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use super::view::ViewId;

#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct Query {
    pub id: u64,
    pub chars: Option<String>,
    pub case_sensitive: Option<bool>,
    pub is_regex: Option<bool>,
    pub whole_words: Option<bool>,
    pub matches: u64,
    pub lines: Vec<u64>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct FindStatus {
    pub view_id: ViewId,
    pub queries: Vec<Query>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct Status {
    pub chars: String,
    pub preserve_case: Option<bool>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq)]
pub struct ReplaceStatus {
    pub view_id: ViewId,
    pub status: Status,
}

#[cfg(test)]
mod test {
    #[test]
    fn test_findstatus() {
        use crate::structs::findreplace::{FindStatus, Query};
        use serde_json;
        use std::str::FromStr;

        let s = r#"{"view_id": "view-id-1", "queries": [{"id": 1, "chars": "a", "case_sensitive": false, "is_regex": false, "whole_words": true, "matches": 6, "lines": [1, 3, 3, 6]}]}"#;
        let deserialized: Result<FindStatus, _> = serde_json::from_str(s);
        let find_status = FindStatus {
            view_id: FromStr::from_str("view-id-1").unwrap(),
            queries: vec![Query {
                id: 1,
                chars: Some("a".to_string()),
                case_sensitive: Some(false),
                is_regex: Some(false),
                whole_words: Some(true),
                matches: 6,
                lines: vec![1, 3, 3, 6],
            }],
        };

        assert_eq!(deserialized.unwrap(), find_status);
    }

    #[test]
    fn test_replacestatus() {
        use crate::structs::findreplace::{ReplaceStatus, Status};
        use serde_json;
        use std::str::FromStr;

        let s = r#"{"view_id": "view-id-1", "status": {"chars": "abc", "preserve_case": false}}"#;
        let deserialized: Result<ReplaceStatus, _> = serde_json::from_str(s);
        let replace_status = ReplaceStatus {
            view_id: FromStr::from_str("view-id-1").unwrap(),
            status: Status {
                chars: "abc".to_string(),
                preserve_case: Some(false),
            },
        };

        assert_eq!(deserialized.unwrap(), replace_status);
    }
}