better error handling
This commit is contained in:
parent
2f0c0934ac
commit
57ed1dd8e1
3 changed files with 53 additions and 24 deletions
|
@ -14,10 +14,14 @@ pub async fn page(config: web::Data<Config>) -> impl Responder {
|
|||
}
|
||||
|
||||
#[derive(Content)]
|
||||
struct PortfolioTemplate {
|
||||
bots_app: Vec<File>,
|
||||
persos_app: Vec<File>,
|
||||
univ_content: String,
|
||||
struct PortfolioTemplate<'a> {
|
||||
bots_app: Option<Vec<File>>,
|
||||
bots_loc: Option<String>,
|
||||
persos_app: Option<Vec<File>>,
|
||||
persos_loc: Option<String>,
|
||||
univ_content: Option<String>,
|
||||
univ_loc: Option<String>,
|
||||
err_msg: &'a str,
|
||||
}
|
||||
|
||||
#[once(time = 60)]
|
||||
|
@ -29,30 +33,45 @@ pub fn get_page(config: Config) -> String {
|
|||
let bots_apps_loc = format!("{projects_dir}/bots");
|
||||
let bots_apps = glob(&format!("{bots_apps_loc}/*{ext}"))
|
||||
.unwrap()
|
||||
.map(|e| read_md_file(&e.unwrap().to_string_lossy()))
|
||||
.map(|e| read_md_file(&e.unwrap().to_string_lossy()).unwrap())
|
||||
.collect::<Vec<File>>();
|
||||
|
||||
// Get perso apps
|
||||
let perso_apps_loc = format!("{projects_dir}/perso");
|
||||
let perso_apps = glob(&format!("{perso_apps_loc}/*{ext}"))
|
||||
.unwrap()
|
||||
.map(|e| read_md_file(&e.unwrap().to_string_lossy()))
|
||||
.map(|e| read_md_file(&e.unwrap().to_string_lossy()).unwrap())
|
||||
.collect::<Vec<File>>();
|
||||
|
||||
let univ_loc = format!("{projects_dir}/univ{ext}");
|
||||
|
||||
let (bots_app, bots_loc) = if bots_apps.is_empty() {
|
||||
(None, Some(bots_apps_loc))
|
||||
} else {
|
||||
(Some(bots_apps), None)
|
||||
};
|
||||
|
||||
let (persos_app, persos_loc) = if perso_apps.is_empty() {
|
||||
(None, Some(perso_apps_loc))
|
||||
} else {
|
||||
(Some(perso_apps), None)
|
||||
};
|
||||
|
||||
let (univ_content, univ_loc) = match read_md_file(&univ_loc) {
|
||||
Some(data) => (Some(data.content), None),
|
||||
_ => (None, Some(univ_loc)),
|
||||
};
|
||||
|
||||
config.tmpl.render(
|
||||
"portfolio.html",
|
||||
PortfolioTemplate {
|
||||
bots_app: if bots_apps.is_empty() {
|
||||
vec![read_md_file(&bots_apps_loc)]
|
||||
} else {
|
||||
bots_apps
|
||||
},
|
||||
persos_app: if perso_apps.is_empty() {
|
||||
vec![read_md_file(&perso_apps_loc)]
|
||||
} else {
|
||||
perso_apps
|
||||
},
|
||||
univ_content: read_md_file(&format!("{projects_dir}/univ{ext}")).content,
|
||||
bots_app,
|
||||
bots_loc,
|
||||
persos_app,
|
||||
persos_loc,
|
||||
univ_content,
|
||||
univ_loc,
|
||||
err_msg: "is empty",
|
||||
},
|
||||
Infos {
|
||||
page_title: Some("Portfolio".to_string()),
|
||||
|
|
|
@ -71,11 +71,12 @@ pub struct File {
|
|||
pub content: String,
|
||||
}
|
||||
|
||||
pub fn read_md_file(filename: &str) -> File {
|
||||
pub fn read_md_file(filename: &str) -> Option<File> {
|
||||
// Read markdown file
|
||||
let text = fs::read_to_string(filename).unwrap_or(format!("{filename} is empty"));
|
||||
|
||||
read_md(&text)
|
||||
match fs::read_to_string(filename) {
|
||||
Ok(text) => Some(read_md(&text)),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn read_md(raw_text: &str) -> File {
|
||||
|
|
|
@ -12,14 +12,21 @@
|
|||
<a href="{{link}} ">{{title}}</a>
|
||||
</h3>
|
||||
{{/info}} {{/metadata}}
|
||||
<div class="subcontent">{{&content }}</div>
|
||||
<div class="subcontent">{{&content}}</div>
|
||||
{{/bots_app}} {{^bots_app}}
|
||||
<p>{{bots_loc}} {{err_msg}}</p>
|
||||
{{/bots_app}}
|
||||
<br />
|
||||
</div>
|
||||
<h2 class="subtitle">
|
||||
<a href="https://git.mylloon.fr/Paris8">Projet de l'université</a>
|
||||
</h2>
|
||||
<div class="subcontent">{{&univ_content}}</div>
|
||||
<div class="subcontent">
|
||||
{{&univ_content}} {{^univ_content}}
|
||||
<p>{{univ_loc}} {{err_msg}}</p>
|
||||
{{/univ_content}}
|
||||
</div>
|
||||
|
||||
<h2 class="subtitle">Projets perso</h2>
|
||||
<div class="subcontent">
|
||||
{{#persos_app}} {{#metadata}} {{#info}}
|
||||
|
@ -27,7 +34,9 @@
|
|||
<a href="{{link}} ">{{title}}</a>
|
||||
</h3>
|
||||
{{/info}} {{/metadata}}
|
||||
<div class="subcontent">{{&content }}</div>
|
||||
<div class="subcontent">{{&content}}</div>
|
||||
{{/persos_app}} {{^persos_app}}
|
||||
<p>{{persos_loc}} {{err_msg}}</p>
|
||||
{{/persos_app}}
|
||||
<br />
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue