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}