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