a mini social media app for small communities
1module main
2
3import emmathemartian.maple
4
5pub struct Config {
6pub mut:
7 dev_mode bool
8 static_path string
9 instance struct {
10 pub mut:
11 name string
12 welcome string
13 default_theme string
14 allow_changing_theme bool
15 }
16 http struct {
17 pub mut:
18 port int
19 }
20 postgres struct {
21 pub mut:
22 host string
23 port int
24 user string
25 password string
26 db string
27 }
28 post struct {
29 pub mut:
30 title_min_len int
31 title_max_len int
32 title_pattern string
33 body_min_len int
34 body_max_len int
35 body_pattern string
36 }
37 user struct {
38 pub mut:
39 username_min_len int
40 username_max_len int
41 username_pattern string
42 nickname_min_len int
43 nickname_max_len int
44 nickname_pattern string
45 password_min_len int
46 password_max_len int
47 password_pattern string
48 pronouns_min_len int
49 pronouns_max_len int
50 pronouns_pattern string
51 bio_min_len int
52 bio_max_len int
53 bio_pattern string
54 }
55}
56
57pub fn load_config_from(file_path string) Config {
58 loaded := maple.load_file(file_path) or { panic(err) }
59 mut config := Config{}
60
61 config.dev_mode = loaded.get('dev_mode').to_bool()
62 config.static_path = loaded.get('static_path').to_str()
63
64 loaded_instance := loaded.get('instance')
65 config.instance.name = loaded_instance.get('name').to_str()
66 config.instance.welcome = loaded_instance.get('welcome').to_str()
67 config.instance.default_theme = loaded_instance.get('default_theme').to_str()
68 config.instance.allow_changing_theme = loaded_instance.get('allow_changing_theme').to_bool()
69
70 loaded_http := loaded.get('http')
71 config.http.port = loaded_http.get('port').to_int()
72
73 loaded_postgres := loaded.get('postgres')
74 config.postgres.host = loaded_postgres.get('host').to_str()
75 config.postgres.port = loaded_postgres.get('port').to_int()
76 config.postgres.user = loaded_postgres.get('user').to_str()
77 config.postgres.password = loaded_postgres.get('password').to_str()
78 config.postgres.db = loaded_postgres.get('db').to_str()
79
80 loaded_post := loaded.get('post')
81 config.post.title_min_len = loaded_post.get('title_min_len').to_int()
82 config.post.title_max_len = loaded_post.get('title_max_len').to_int()
83 config.post.title_pattern = loaded_post.get('title_pattern').to_str()
84 config.post.body_min_len = loaded_post.get('body_min_len').to_int()
85 config.post.body_max_len = loaded_post.get('body_max_len').to_int()
86 config.post.body_pattern = loaded_post.get('body_pattern').to_str()
87
88 loaded_user := loaded.get('user')
89 config.user.username_min_len = loaded_user.get('username_min_len').to_int()
90 config.user.username_max_len = loaded_user.get('username_max_len').to_int()
91 config.user.username_pattern = loaded_user.get('username_pattern').to_str()
92 config.user.nickname_min_len = loaded_user.get('nickname_min_len').to_int()
93 config.user.nickname_max_len = loaded_user.get('nickname_max_len').to_int()
94 config.user.nickname_pattern = loaded_user.get('nickname_pattern').to_str()
95 config.user.password_min_len = loaded_user.get('password_min_len').to_int()
96 config.user.password_max_len = loaded_user.get('password_max_len').to_int()
97 config.user.password_pattern = loaded_user.get('password_pattern').to_str()
98 config.user.pronouns_min_len = loaded_user.get('pronouns_min_len').to_int()
99 config.user.pronouns_max_len = loaded_user.get('pronouns_max_len').to_int()
100 config.user.pronouns_pattern = loaded_user.get('pronouns_pattern').to_str()
101 config.user.bio_min_len = loaded_user.get('bio_min_len').to_int()
102 config.user.bio_max_len = loaded_user.get('bio_max_len').to_int()
103 config.user.bio_pattern = loaded_user.get('bio_pattern').to_str()
104
105 return config
106}