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}