This commit is contained in:
Hubert 2021-07-02 06:31:43 +02:00
parent 4ac443c986
commit a2e7be3d7c
3 changed files with 46 additions and 8 deletions

View File

@ -23,16 +23,29 @@ struct HelloTemplate<'a> {
name: &'a str, name: &'a str,
} }
struct User {
name : String,
}
struct Owner {
name : String,
}
struct Repository {
name : String,
owner : Owner,
}
#[derive(Template)] #[derive(Template)]
#[template(path = "git.html")] #[template(path = "git.html")]
struct GitMainTemplate<TS, ROOT> struct GitMainTemplate<TS, ROOT>
where for <'a> &'a TS : IntoIterator<Item = &'a GitBrowseEntry>, where for <'a> &'a TS : IntoIterator<Item = &'a GitBrowseEntry>,
for <'a> &'a ROOT : IntoIterator<Item = &'a (String, String)>, for <'a> &'a ROOT : IntoIterator<Item = &'a (String, String)>,
{ {
user: String, repo : Repository,
repo : String,
browse : TS, browse : TS,
root : ROOT, root : ROOT,
user_opt : Option<User>,
} }
#[get("/")] #[get("/")]
@ -69,17 +82,20 @@ async fn hello_auth(req : HttpRequest) -> impl Responder {
} }
} }
#[get("/git/{user}/{repo}/{commit}/{path:.*}")] #[get("/git/{owner}/{repo}/{commit}/{path:.*}")]
async fn git_main(web::Path((user, reponame, commitname, rootname)): web::Path<(String, String, String, String)>) -> impl Responder { async fn git_main(web::Path((owner, reponame, commitname, rootname)): web::Path<(String, String, String, String)>) -> impl Responder {
let repo = GitRepo::new(); let repo = GitRepo::new();
let path : Vec<(String, String)> = rootname.split("/").map_accum("/git/".to_string() + &user + "/" + &reponame + "/" + &commitname, |str_ref, b| { let path : Vec<(String, String)> = rootname.split("/").map_accum("/git/".to_string() + &owner + "/" + &reponame + "/" + &commitname, |str_ref, b| {
let href = b + "/" + str_ref; let href = b + "/" + str_ref;
((str_ref.to_string(), href.clone()), href) ((str_ref.to_string(), href.clone()), href)
}).collect(); }).collect();
let commit = GitCommit::new(commitname); let commit = GitCommit::new(commitname);
let root = GitBrowseDir::new(rootname); let root = GitBrowseDir::new(rootname);
let browse = repo.browse(&commit, &root).await; let browse = repo.browse(&commit, &root).await;
GitMainTemplate { user, repo : reponame, browse : browse, root : path} let owner = Owner { name : owner};
let repo = Repository {name : reponame, owner};
let user = User { name : "Hubert".to_string()};
GitMainTemplate { repo, browse : browse, root : path, user_opt : Some(user)}
} }
#[post("/echo")] #[post("/echo")]

View File

@ -3,9 +3,31 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<title>{{repo}}</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<title>{{repo.name}}</title>
</head> </head>
<body> <body>
<div class="w3-container">
<div class="w3-bar w3-border w3-light-grey">
<a href="#" class="w3-bar-item w3-button w3-green"><i class="fa fa-home"></i> Home</a>
<a href="#" class="w3-bar-item w3-button">Link 1</a>
<a href="#" class="w3-bar-item w3-button">Link 2</a>
{% match user_opt %}
{% when Some with (user) %}
<div class="w3-dropdown-hover w3-right">
<button class="w3-button">{{user.name}}</button>
<div class="w3-dropdown-content w3-bar-block w3-card-4">
<a href="#" class="w3-bar-item w3-button">Link 1</a>
<a href="#" class="w3-bar-item w3-button">Link 2</a>
<a href="#" class="w3-bar-item w3-button">Link 3</a>
</div>
</div>
<a href="#" class="w3-bar-item w3-button w3-right"><i class="fa fa-sign-out"></i> Log out</a>
{% when None %}
<a href="#" class="w3-bar-item w3-button w3-right"><i class="fa fa-sign-in"></i> Log in</a>
{% endmatch %}
</div>
{% block content %}{% endblock %} {% block content %}{% endblock %}
</div>
</body> </body>
</html> </html>

View File

@ -13,7 +13,7 @@
<div class="w3-col m3 w3-center"><p></p></div> <div class="w3-col m3 w3-center"><p></p></div>
<div class="w3-col m6 w3-left-align"> <div class="w3-col m6 w3-left-align">
<div class="w3-container w3-amber w3-round w3-margin"> <div class="w3-container w3-amber w3-round w3-margin">
<h1>{{user}}/{{repo}}</h1> <h1>{{repo.owner.name}}/{{repo.name}}</h1>
</div> </div>
</div> </div>
</div> </div>