jag

typing_rust

public

A small typing test program in Rust

Star0
Watch0
1040e777706ccb9f03f2517a97ccef603025c5db
1
ssh://git@git.jaglekon.de:30/jag/typing_rust.git
src/text_combine.rsRust118 lines2.3 KB
1
use rand::prelude::*;
2
3
#[derive(Debug)]
4
pub struct TextCombine {
5
    text: String,
6
    len: usize,
7
    pos: usize,
8
    err_n: usize,
9
    err_s: String,
10
}
11
12
impl TextCombine {
13
    pub fn new() -> Self {
14
        let words = [
15
            "hello",
16
            "how",
17
            "to",
18
            "back",
19
            "big",
20
            "small",
21
            "something",
22
            "glad",
23
            "general",
24
            "tall",
25
            "nail",
26
            "whatever",
27
            "joke",
28
            "feral",
29
            "apple",
30
            "plow"
31
        ];
32
33
        /*let text = words
34
                    .choose_multiple(&mut rand::rng(), 10)
35
                    .cloned()
36
                    .collect::<Vec<_>>()
37
                    .join(" ");*/
38
        let mut rng = rand::rng();
39
40
        let text = (0..60)
41
            .filter_map(|_| words.choose(&mut rng))
42
            .cloned()
43
            .collect::<Vec<_>>()
44
            .join(" ");
45
46
        let len = text.chars().count();
47
48
        Self {
49
            text,
50
            len,
51
            pos: 0,
52
            err_n: 0,
53
            err_s: String::new(),
54
        }
55
56
    }
57
58
    pub fn get_text(&self) -> &str {
59
        &self.text
60
    }
61
62
    pub fn get_pos(&self) -> usize {
63
        self.pos
64
    }
65
66
    pub fn pos_increment(&mut self) {
67
        if self.pos < self.len {
68
            self.pos += 1;
69
        }
70
    }
71
72
    pub fn err_n_increment(&mut self) {
73
        if self.real_pos() < self.len {
74
            self.err_n += 1;
75
        }
76
    }
77
78
    pub fn get_err_n(&self) -> usize {
79
        self.err_n
80
    }
81
82
    pub fn get_err_s(&self) -> &str {
83
        &self.err_s
84
    }
85
86
    pub fn push_err_s(&mut self, c: char) {
87
        self.err_s.push(c);
88
    }
89
90
    pub fn get_len(&self) -> usize {
91
        self.len
92
    }
93
94
    pub fn curr_char(&self) -> Option<char> {
95
        self.pos_char(self.real_pos())
96
    }
97
98
    pub fn pos_char(&self, pos: usize) -> Option<char> {
99
        self
100
            .text
101
            .chars()
102
            .nth(pos) 
103
    }
104
105
    pub fn real_pos(&self) -> usize {
106
        self.pos + self.err_n
107
    }
108
109
    pub fn back(&mut self) {
110
        if self.err_s.len() > 0 {
111
            self.err_s.pop() ;
112
        } else if self.err_n > 0 {
113
            self.err_n -= 1;
114
        } else if self.pos > 0 {
115
            self.pos -= 1;
116
        }
117
    }
118
}