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}