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 }
14 http struct {
15 pub mut:
16 port int
17 }
18 postgres struct {
19 pub mut:
20 host string
21 port int
22 user string
23 password string
24 db string
25 }
26 post struct {
27 pub mut:
28 title_min_len int
29 title_max_len int
30 title_pattern string
31 body_min_len int
32 body_max_len int
33 body_pattern string
34 }
35 user struct {
36 pub mut:
37 username_min_len int
38 username_max_len int
39 username_pattern string
40 nickname_min_len int
41 nickname_max_len int
42 nickname_pattern string
43 password_min_len int
44 password_max_len int
45 password_pattern string
46 pronouns_min_len int
47 pronouns_max_len int
48 pronouns_pattern string
49 bio_min_len int
50 bio_max_len int
51 bio_pattern string
52 default_theme string
53 allow_changing_theme bool
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
68 loaded_http := loaded.get('http')
69 config.http.port = loaded_http.get('port').to_int()
70
71 loaded_postgres := loaded.get('postgres')
72 config.postgres.host = loaded_postgres.get('host').to_str()
73 config.postgres.port = loaded_postgres.get('port').to_int()
74 config.postgres.user = loaded_postgres.get('user').to_str()
75 config.postgres.password = loaded_postgres.get('password').to_str()
76 config.postgres.db = loaded_postgres.get('db').to_str()
77
78 loaded_post := loaded.get('post')
79 config.post.title_min_len = loaded_post.get('title_min_len').to_int()
80 config.post.title_max_len = loaded_post.get('title_max_len').to_int()
81 config.post.title_pattern = loaded_post.get('title_pattern').to_str()
82 config.post.body_min_len = loaded_post.get('body_min_len').to_int()
83 config.post.body_max_len = loaded_post.get('body_max_len').to_int()
84 config.post.body_pattern = loaded_post.get('body_pattern').to_str()
85
86 loaded_user := loaded.get('user')
87 config.user.username_min_len = loaded_user.get('username_min_len').to_int()
88 config.user.username_max_len = loaded_user.get('username_max_len').to_int()
89 config.user.username_pattern = loaded_user.get('username_pattern').to_str()
90 config.user.nickname_min_len = loaded_user.get('nickname_min_len').to_int()
91 config.user.nickname_max_len = loaded_user.get('nickname_max_len').to_int()
92 config.user.nickname_pattern = loaded_user.get('nickname_pattern').to_str()
93 config.user.password_min_len = loaded_user.get('password_min_len').to_int()
94 config.user.password_max_len = loaded_user.get('password_max_len').to_int()
95 config.user.password_pattern = loaded_user.get('password_pattern').to_str()
96 config.user.pronouns_min_len = loaded_user.get('pronouns_min_len').to_int()
97 config.user.pronouns_max_len = loaded_user.get('pronouns_max_len').to_int()
98 config.user.pronouns_pattern = loaded_user.get('pronouns_pattern').to_str()
99 config.user.bio_min_len = loaded_user.get('bio_min_len').to_int()
100 config.user.bio_max_len = loaded_user.get('bio_max_len').to_int()
101 config.user.bio_pattern = loaded_user.get('bio_pattern').to_str()
102 config.user.default_theme = loaded_user.get('default_theme').to_str()
103 config.user.allow_changing_theme = loaded_user.get('allow_changing_theme').to_bool()
104
105 return config
106}