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 version string 17 source string 18 } 19 http struct { 20 pub mut: 21 port int 22 } 23 postgres struct { 24 pub mut: 25 host string 26 port int 27 user string 28 password string 29 db string 30 } 31 hcaptcha struct { 32 pub mut: 33 enabled bool 34 secret string 35 site_key string 36 } 37 post struct { 38 pub mut: 39 title_min_len int 40 title_max_len int 41 title_pattern string 42 body_min_len int 43 body_max_len int 44 body_pattern string 45 } 46 user struct { 47 pub mut: 48 username_min_len int 49 username_max_len int 50 username_pattern string 51 nickname_min_len int 52 nickname_max_len int 53 nickname_pattern string 54 password_min_len int 55 password_max_len int 56 password_pattern string 57 pronouns_min_len int 58 pronouns_max_len int 59 pronouns_pattern string 60 bio_min_len int 61 bio_max_len int 62 bio_pattern string 63 } 64 welcome struct { 65 pub mut: 66 summary string 67 body string 68 } 69} 70 71pub fn load_config_from(file_path string) Config { 72 loaded := maple.load_file(file_path) or { panic(err) } 73 mut config := Config{} 74 75 config.dev_mode = loaded.get('dev_mode').to_bool() 76 config.static_path = loaded.get('static_path').to_str() 77 78 loaded_instance := loaded.get('instance') 79 config.instance.name = loaded_instance.get('name').to_str() 80 config.instance.welcome = loaded_instance.get('welcome').to_str() 81 config.instance.default_theme = loaded_instance.get('default_theme').to_str() 82 config.instance.allow_changing_theme = loaded_instance.get('allow_changing_theme').to_bool() 83 config.instance.version = loaded_instance.get('version').to_str() 84 config.instance.source = loaded_instance.get('source').to_str() 85 86 loaded_http := loaded.get('http') 87 config.http.port = loaded_http.get('port').to_int() 88 89 loaded_postgres := loaded.get('postgres') 90 config.postgres.host = loaded_postgres.get('host').to_str() 91 config.postgres.port = loaded_postgres.get('port').to_int() 92 config.postgres.user = loaded_postgres.get('user').to_str() 93 config.postgres.password = loaded_postgres.get('password').to_str() 94 config.postgres.db = loaded_postgres.get('db').to_str() 95 96 loaded_hcaptcha := loaded.get('hcaptcha') 97 config.hcaptcha.enabled = loaded_hcaptcha.get('enabled').to_bool() 98 config.hcaptcha.secret = loaded_hcaptcha.get('secret').to_str() 99 config.hcaptcha.site_key = loaded_hcaptcha.get('site_key').to_str() 100 101 loaded_post := loaded.get('post') 102 config.post.title_min_len = loaded_post.get('title_min_len').to_int() 103 config.post.title_max_len = loaded_post.get('title_max_len').to_int() 104 config.post.title_pattern = loaded_post.get('title_pattern').to_str() 105 config.post.body_min_len = loaded_post.get('body_min_len').to_int() 106 config.post.body_max_len = loaded_post.get('body_max_len').to_int() 107 config.post.body_pattern = loaded_post.get('body_pattern').to_str() 108 109 loaded_user := loaded.get('user') 110 config.user.username_min_len = loaded_user.get('username_min_len').to_int() 111 config.user.username_max_len = loaded_user.get('username_max_len').to_int() 112 config.user.username_pattern = loaded_user.get('username_pattern').to_str() 113 config.user.nickname_min_len = loaded_user.get('nickname_min_len').to_int() 114 config.user.nickname_max_len = loaded_user.get('nickname_max_len').to_int() 115 config.user.nickname_pattern = loaded_user.get('nickname_pattern').to_str() 116 config.user.password_min_len = loaded_user.get('password_min_len').to_int() 117 config.user.password_max_len = loaded_user.get('password_max_len').to_int() 118 config.user.password_pattern = loaded_user.get('password_pattern').to_str() 119 config.user.pronouns_min_len = loaded_user.get('pronouns_min_len').to_int() 120 config.user.pronouns_max_len = loaded_user.get('pronouns_max_len').to_int() 121 config.user.pronouns_pattern = loaded_user.get('pronouns_pattern').to_str() 122 config.user.bio_min_len = loaded_user.get('bio_min_len').to_int() 123 config.user.bio_max_len = loaded_user.get('bio_max_len').to_int() 124 config.user.bio_pattern = loaded_user.get('bio_pattern').to_str() 125 126 loaded_welcome := loaded.get('welcome') 127 config.welcome.summary = loaded_welcome.get('summary').to_str() 128 config.welcome.body = loaded_welcome.get('body').to_str() 129 130 return config 131}