random_ayah/
lib.rs

1use rand::seq::SliceRandom;
2
3const SURAS: [&str; 114] = [
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    "المزمل",
77    "المدثر",
78    "القيامة",
79    "الانسان",
80    "المرسلات",
81    "النبإ",
82    "النازعات",
83    "عبس",
84    "التكوير",
85    "الإنفطار",
86    "المطففين",
87    "الإنشقاق",
88    "البروج",
89    "الطارق",
90    "الأعلى",
91    "الغاشية",
92    "الفجر",
93    "البلد",
94    "الشمس",
95    "الليل",
96    "الضحى",
97    "الشرح",
98    "التين",
99    "العلق",
100    "القدر",
101    "البينة",
102    "الزلزلة",
103    "العاديات",
104    "القارعة",
105    "التكاثر",
106    "العصر",
107    "الهمزة",
108    "الفيل",
109    "قريش",
110    "الماعون",
111    "الكوثر",
112    "الكافرون",
113    "النصر",
114    "المسد",
115    "الإخلاص",
116    "الفلق",
117    "الناس"];
118
119#[derive(Default)]
120pub struct Ayah {
121    sura: u8,
122    ayah: u8,
123    text: String
124}
125
126impl Ayah {
127    fn sura(mut self, sura: u8) -> Ayah {
128        self.sura = sura;
129        self
130    }
131    fn ayah(mut self, ayah: u8) -> Ayah {
132        self.ayah = ayah;
133        self
134    }
135    fn text(mut self, text: String) -> Ayah {
136        self.text = text;
137        self
138    }
139    fn ayah_in_arabic(&self) -> String {
140        let latin_digits: [&str; 10] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
141        let arabic_digits: [&str; 10] = ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"];
142        let mut ayah = self.ayah.to_string();
143        for digit in 0..=9 {
144            ayah = ayah.replace(latin_digits[digit], arabic_digits[digit]);
145        }
146        ayah
147    }
148    pub fn get_text(&self) -> String {
149        format!("{} ﴿{}﴾ {}", self.text, self.ayah_in_arabic(), SURAS[(self.sura - 1) as usize])
150    }
151}
152
153fn read_file() -> String {
154    let file_content = include_str!("quran-simple-plain.txt");
155    file_content.to_string()
156}
157
158pub fn get_random_ayah() -> Ayah {
159    let file_content: Vec<String> = read_file().split("\n").map(|s| s.to_owned()).collect();
160    let random_ayah: Vec<String> = file_content.choose(&mut rand::thread_rng()).unwrap().split("|").map(|s| s.to_owned()).collect();
161    let ayah = Ayah::default()
162        .sura(random_ayah[0].parse::<u8>().unwrap())
163        .ayah(random_ayah[1].parse::<u8>().unwrap())
164        .text(random_ayah[2].to_string());
165    ayah
166}